我有这个设计。我无法实现我的需求:
我的目标是在完成任务后重启(重新运行)到“worker”线程。我打算为这种方法调用工作线程析构函数,因为它从堆中获取内存。我需要清理所有相关变量。
我怎样才能做到这一点?
int main()
{
// re-start start
A* worker = B::getInstance();
worker->start();
// re-start end
return a.exec();
}
编写for循环不是解决方案。因为,我需要学习工作线程完全停止。我尝试使用worker-> wait()。但它不起作用。
答案 0 :(得分:2)
如何使用QThread
的信号finished()
?
答案 1 :(得分:0)
我不完全理解您的问题,但是如果您分配了线程并且必须在完成后重新启动它,您可以执行以下操作:
检查:
重启:
答案 2 :(得分:0)
RAII(资源获取是初始化)中的一般规则是获取资源的代码负责确保它被释放。因此,您的工作线程应在释放它已获取的所有资源后终止。
主程序的一般风格是:
或者,主线程仍然可以在永久循环中运行,但是当可委托任务到达时识别,并在那时初始化工作线程并为其指定特定任务。这允许与不完整的可委托任务一样多的工作线程。您可能需要限制数量,以便没有太多不完整的任务。