如何根据用户请求安全地停止正在运行的线程?

Don*_*alo 3 c c++ qt multithreading

我正处于根据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--)
                {
                }
            }
        }
};
Run Code Online (Sandbox Code Playgroud)

请注意,上述代码很少.运行功能在完成之前最多可能需要20秒,所以我想避免mutex在循环中锁定和解锁变量.有没有比这种方法更快的方法.

提前致谢.

Ste*_*epp 8

它不能直接满足您的需求,但您不能将您的互斥体范围更加严格吗?

while(counter1--) {
    {
      QMutexLocker(&mutex);
      if (stop) return;
    } // End locking scope : we won't read it anymore until next time
    while(counter2--)
...   
Run Code Online (Sandbox Code Playgroud)