QRunnable尝试中止任务

时间:2014-03-13 20:43:58

标签: multithreading qt

是否可以中止QRunnable任务?

即使在文档中我也找不到任何方法。

非常感谢

2 个答案:

答案 0 :(得分:2)

Qt共享一个类似于许多其他框架的线程对象模型(想到.NET语言和Java)。在这些类型的框架中,通常不鼓励尝试“中止”线程。其他线程实现(如POSIX)大致相同。肮脏杀死一个线程是不好的做法。

相反,在run()内部构造逻辑,以便您可以经常放置“检查点”以确定run()函数是否可以安全地终止。这些检查点应检查指示线程应该结束的标志(或其他一些标记)。

答案 1 :(得分:1)

不,你不能中止QRunnable任务。

在Qt中弄脏中止线程的唯一方法是QThread::terminate()(不鼓励)。

QThreadPool使用QThread幕后操作来运行QRunnable任务,但它没有为开发人员提供调用QThread::terminate()的方法。因此,QRunnable不能被中止。

我建议您重新设计应用程序 - 请参阅Multithreading Technologies in Qt以了解可以使用线程的所有方法,并选择与您的用例匹配的解决方案。