我所处的场景是,当线程根据 GUI 上的用户操作运行时,我必须终止该线程。我在 Windows 上使用 Qt 4.5.2。一种方法如下:
class MyThread : public QThread
{
QMutex mutex;
bool stop;
public:
MyThread() : stop(false) {}
void requestStop()
{
QMutexLocker(&mutex);
stop = true;
}
void run()
{
while(counter1--)
{
QMutexLocker(&mutex);
if (stop) return;
while(counter2--)
{
}
}
}
};
请注意,上面的代码是最少的。运行函数最多可能需要 20 秒才能完成,因此我想避免锁定和解锁mutex
循环中的变量。有没有比这个方法更快的其他方法。
提前致谢。
它不能直接满足您的需求,但是您不能将互斥体的范围限制得更紧吗?
while(counter1--) {
{
QMutexLocker(&mutex);
if (stop) return;
} // End locking scope : we won't read it anymore until next time
while(counter2--)
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)