如何终止QThread?

时间:2009-08-24 07:27:10

标签: c++ qt qthread

QThread::terminate()文档说明不鼓励通过调用此函数来终止线程 在我的程序中,我需要在完成执行之前终止一个线程。线程正在执行一些繁重的计算,我希望用户有控制权来停止计算 我怎么能这样做而不是叫QThread::terminate()

3 个答案:

答案 0 :(得分:10)

在线程外部设置一个由线程内的计算检查的标志,如果设置了标志则停止计算。

答案 1 :(得分:1)

使用标志是一种显而易见且最常用的技巧,但如果您正在使用linux / unix平台,我建议您使用管道。我有同样的问题,我使用了一个标志(这使得代码threadunsafe,并且由这样的标志产生的错误很难跟踪),然后我改变了实现使用管道,这是一种有效的方式来做必要的。

如果您愿意,对于Linux平台,我可以向您展示如何使用管道来终止QThread。

你可能也有相当于管道的窗户,我不太了解,因为我在Windows平台上没有做太多编程。

希望这有帮助

答案 2 :(得分:1)

最好是使用flag + mutex,这将使解决方案线程安全。