QThread::terminate()
文档指出不鼓励通过调用此函数来终止线程。
在我的程序中,我需要在线程完成执行之前终止它。该线程正在执行一些繁重的计算,我希望用户能够控制停止计算。
我该怎么做而不是打电话QThread::terminate()
?
问问题
2405 次
3 回答
10
从线程外部设置一个标志,该标志由线程内的计算检查,如果设置了该标志,则停止计算。
于 2009-08-24T07:39:45.537 回答
1
使用标志是一种显而易见且最常用的方法,但如果您在 linux/unix 平台上工作,我建议您改用管道。我在使用标志时遇到了同样的问题(这使得代码线程不安全,并且很难跟踪由这种标志引起的错误),然后我将实现更改为使用管道,这是一种有效的解决方法。
如果您愿意,对于 linux 平台,我可以向您展示如何使用管道来终止 QThread。
你可能也有windows等价的管道,我不太了解,因为我没有在windows平台上做过很多编程。
希望这可以帮助
于 2009-08-24T11:13:06.680 回答
1
最好是使用标志 + 互斥锁,这将使解决方案线程安全。
于 2011-04-26T07:31:49.697 回答