有没有办法检测QT QRunnable对象何时完成?

时间:2010-10-14 07:26:08

标签: multithreading qt threadpool

有没有办法检测QT QRunnable对象何时完成? (除了在run()方法结束时手动创建一些信令事件。)

3 个答案:

答案 0 :(得分:5)

您可以简单地使用QtConcurrent来运行runnable并使用QFuture等待完成。

#include <QtConcurrentRun>

class MyRunnable : public Runnable{
  void run();
}

为了运行并等待它,您可以执行以下操作

//create a new MyRunnable to use
MyRunnable instance;

//run the instance asynchronously
QFuture<void> future = QtConcurrent::run(&instance, &MyRunnable::run);

//wait for the instance completion
future.waitForFinished();

Qtconcurrent :: run将启动一个新线程在实例上执行方法run()并立即返回一个跟踪实例进度的QFuture。

请注意,使用此解决方案,您有责任在执行期间将实例保留在内存中。

答案 1 :(得分:4)

可能有,或者你可能需要稍高一点。 QFutureQFutureWatcher类旨在与Qt的Concurrent frameworkQFutureWatcherhas a signal一起使用,当它正在观看的项目结束时。

答案 2 :(得分:4)

您可以添加自己的SIGNAL作为run()方法执行的最后一项操作。然后,只需在调用SLOT

之前将其连接到coreesponding connect(...);即可