可以使用QFutureWatcher监视所有使用QConcurrent运行的多个串行任务吗?

时间:2018-02-06 17:21:35

标签: c++ qt qtconcurrent qfuture

我需要在一组图像上执行一系列任务。我想要一个接一个地运行3个步骤,但是中间的步骤需要连续运行,因为它依赖于所有先前迭代的结果。我想要的是使用QFutureWatcher将这三个任务的进度转发回UI。我已经有其他任务执行此操作并挂钩进度条等,所以如果可以,请使用相同的过程。我正在考虑实现的方法是让一个内部QFutureQFutureWatcher运行每个任务,一个外部QFutureWatcher监视这个中继信息到UI。也许是这样的(伪代码):

runProcessingTask() {
    connect(externalFutureWatcher, UI elements)
    internalFuture = start first task 
    internalFutureWatcher.setFuture(internalFuture)
    connect(internalFuture.finished(), taskfinished())
    connect(internalFuture.progressValue(), updateProgress())
    taskNumber = 1
}

taskFinished() {
    switch(taskNumber):
    case 1:
        internalFuture = start second task 
        internalFutureWatcher.setFuture(internalFuture)
        taskNumber = 2
    case 2:
        internalFuture = start third task 
        internalFutureWatcher.setFuture(internalFuture)
        taskNumber = 3
    case 3:
        externalFutureWatcher.setFinished()
}

updateProgress() {
    switch(taskNumber):
    case 1:
        extrenalFutureWatcher.setProgress(internalFutureWatcher.progress() / 3)
    case 2:
        extrenalFutureWatcher.setProgress(33.3% + (internalFutureWatcher.progress() / 3))
    case 3:
        extrenalFutureWatcher.setProgress(66.6% + (internalFutureWatcher.progress() / 3))
}

这类事可能吗?我只需要覆盖QFutureWatcher中的某些方法并将它们用作我的externalFutureWatcher吗?或者以这种方式不可能/有更好的方法吗?

0 个答案:

没有答案