gpt4 book ai didi

visual-studio-2010 - 暂停和恢复QThread

转载 作者:行者123 更新时间:2023-12-04 13:24:21 27 4
gpt4 key购买 nike

我最近开始学习QThreads,并且我有一个程序可以在一个单独的线程中运行4小时长的循环(以便我可以继续使用GUI)。我所追求的是,​​当用户单击“暂停” qpushbutton时,将使线程暂停/暂停的事情;当用户单击“恢复” qpushbutton时,程序应继续执行。我该如何实现?

我当时在想从我的主要类(class)发出信号。但是,我不确定如何在线程中处理它们。是否可以在线程中处理从主类发送的信号?目前,我有向主类发送信号的线程,并且工作正常,但是我不确定如何从主类发送线程并在线程中接收它们。

最佳答案

好的,所以我建议您在循环的每个步骤中都将检查内部线程变量+ QWaitCondition以恢复它。

  • 创建暂停方法,您将在其中打开“暂停字段”(大声?),别忘了同步它
  • 在您自己的循环中,使用QWaitCondition(请参阅Qt文档)暂停线程执行
  • 创建恢复方法,您将在其中关闭“暂停字段”并唤醒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
    }
    }
    };
  • 关于visual-studio-2010 - 暂停和恢复QThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9075837/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com