【发布时间】:2009-08-24 07:27:10
【问题描述】:
QThread::terminate() 文档声明不鼓励通过调用此函数来终止线程。
在我的程序中,我需要在线程完成执行之前终止它。线程正在执行一些繁重的计算,我希望用户能够控制停止计算。
我该怎么做而不是打电话给QThread::terminate()?
【问题讨论】:
QThread::terminate() 文档声明不鼓励通过调用此函数来终止线程。
在我的程序中,我需要在线程完成执行之前终止它。线程正在执行一些繁重的计算,我希望用户能够控制停止计算。
我该怎么做而不是打电话给QThread::terminate()?
【问题讨论】:
从线程外部设置一个标志,该标志由线程内的计算检查,如果设置了该标志,则停止计算。
【讨论】:
使用标志是一种显而易见且最常用的方法,但如果您在 linux/unix 平台上工作,我建议您改用管道。我在使用标志时遇到了同样的问题(这使得代码线程不安全,并且很难跟踪由这种标志引起的错误),然后我将实现更改为使用管道,这是一种有效的解决方法。
如果您愿意,对于 linux 平台,我可以向您展示如何使用管道来终止 QThread。
你可能也有windows等价的管道,我不太了解,因为我没有在Windows平台上做过很多编程。
希望对你有帮助
【讨论】:
QMutex)。一个稍微肮脏的方法是滥用QThread::setPriority(QThread::IdlePriority);并在你的计算循环中检查QThread::priority。
最好使用标志 + 互斥锁,这将使解决方案线程安全。
【讨论】: