Multithreading 是否有一种方法可以检测何时完成了一个不可命名的对象?

Multithreading 是否有一种方法可以检测何时完成了一个不可命名的对象?,multithreading,qt,threadpool,Multithreading,Qt,Threadpool,是否有一种方法可以检测何时完成了一个不可命名的对象?(除了在run()方法结束时手动创建一些信号事件之外。)可能有,或者您可能需要稍微高级一点。and类被设计为与Qt以及QFutureWatcher类一起工作,当它正在监视的项目完成时。您可以添加自己的信号,该信号作为run()方法所做的最后一件事发出。然后只需在调用connect(…)之前将其连接到corespondingSLOT您只需使用QtConcurrent运行runnable并使用QFuture等待完成 #include <QtC

是否有一种方法可以检测何时完成了一个不可命名的对象?(除了在run()方法结束时手动创建一些信号事件之外。)

可能有,或者您可能需要稍微高级一点。and类被设计为与Qt以及
QFutureWatcher
类一起工作,当它正在监视的项目完成时。

您可以添加自己的
信号,该信号作为
run()
方法所做的最后一件事发出。然后只需在调用
connect(…)之前将其连接到coresponding
SLOT

您只需使用QtConcurrent运行runnable并使用QFuture等待完成

#include <QtConcurrentRun>

class MyRunnable : public Runnable{
  void run();
}
#包括
类MyRunnable:公共Runnable{
无效运行();
}
为了运行并等待它,您可以执行以下操作

//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();
//创建一个新的MyRunnable以供使用
MyRunnable实例;
//异步运行实例
QFuture future=QtConcurrent::run(&instance,&MyRunnable::run);
//等待实例完成
future.waitForFinished();
Qtconcurrent::run将启动一个新线程在实例上执行方法run(),并立即返回跟踪实例进度的QFuture


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

您能详细说明一下吗?我应该如何将QRunnable与QFuture关联?或者您建议不要使用QRunnable?请注意,您需要从QRunnable和QObject继承类才能这样做。您也可以使用QMetaObject::invokeMethod()直接调用slot。如果您使用Qt::QueuedConnection,您可以在另一个线程的上下文中安全地调用插槽。。。在您的示例中,您从类Runnable(QRunnable?)派生—但我认为它在不从任何类派生的情况下都可以工作?事实上,我只是想让示例尽可能接近请求。当然,您是对的:myRunnable可以是任何类。