C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 如何根据用户请求安全地停止正在运行的线程?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正处于根据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秒,所以我想避免在循环中锁定和解锁互斥变量.有没有比这种方法更快的方法.

提前致谢.

解决方法

首先,看起来你不需要在你的整个内循环周围需要一个互斥量,就像其他人所说的那样围绕if(停止)表达式,但我可能会错过你的一些应用程序上下文来明确地说出来.也许你需要requestStop()来阻塞,直到线程退出.

如果减少的互斥范围适合您,那么如果将停止变量声明为“volatile”,则根本不需要互斥锁. “volatile”关键字导致(至少在VC下)读取/写入内存屏障围绕访问停止,这意味着您的requestStop()调用将保证传递给您的线程而不是缓存.以下代码应该可以在多核处理器上正常工作.

class myThread : public QThread
{
    volatile bool stop;

    public:
        myThread() : stop(false) {}

        void requestStop()
        {
            stop = true;
        }

        void run()
        {
            while(counter1--)
            {
                if (stop) return;

                while(counter2--)
                {
                }
            }
        }
};

大佬总结

以上是大佬教程为你收集整理的c – 如何根据用户请求安全地停止正在运行的线程?全部内容,希望文章能够帮你解决c – 如何根据用户请求安全地停止正在运行的线程?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。