暂停并恢复QThread

Jea*_*Luc 6 qt4 visual-studio-2010 qthread

我最近开始学习QThreads,我有一个程序在一个单独的线程中运行4个小时的循环(这样我可以继续使用GUI).我所追求的是,​​当用户点击暂停qpushbutton时暂停/暂停线程的东西,当用户点击恢复qpushbutton时,程序应该恢复.我怎么能实现这个目标?

我正在考虑从我的主班发送信号; 但是,我不确定如何在线程中处理它们.是否可以处理线程中主类发送的信号?目前,我有线程向主类发出信号,并且工作正常,但我不知道如何从主类发送线程,并在线程中接收它们.

Kam*_*mek 15

好的,所以我建议你制作内部线程变量,在你的循环的每个步骤中检查QWaitCondition它以恢复它.

  1. 创建暂停方法,您将在其中打开"暂停字段"(bool?),不要忘记同步它
  2. 在你自己的循环中使用QWaitCondition(参见Qt docs)暂停线程执行
  3. 创建简历方法,您将关闭"暂停字段"并唤醒QWaitCondition

    class MyWorker: public QThread
    {
    private:
        QMutex sync;
        QWaitCondition pauseCond;
        bool pause;
    
    public:
        MyWorker(...): pause(false) {}
    
        void resume()
        {
            sync.lock();
            pause = false;
            sync.unlock();
            pauseCond.wakeAll();
        }
    
        void pause()
        {
            sync.lock();
            pause = true;
            sync.unlock();
        }
    
    protected:
        void run()
        {
            while(someCondition) // gues it's your loop
            {
                 sync.lock();
                 if(pause)
                     pauseCond.wait(&sync); // in this place, your thread will stop to execute until someone calls resume
                 sync.unlock();
    
                 // do your operation
            }
        }
    };
    
    Run Code Online (Sandbox Code Playgroud)