C++ QT QThread基操

    C++ QT QThread是一个多线程编程框架,可以让开发者轻松地创建和管理多个线程。它提供了一种简单的方式来实现并发编程,可以在同一时间运行多个任务,从而提高应用程序的性能和响应能力。QThread也提供了一些方便的工具和函数来帮助开发者控制线程的行为,例如线程的启动、停止、暂停、恢复等。QThread是C++ QT框架中的一个重要组件,被广泛应用于各种类型的应用程序中。
    
    QThread的启动、停止、暂停和恢复具体用法如下:

    1. 启动线程:调用QThread的start函数启动线程,线程会自动调用run函数执行任务。

    2. 停止线程:调用QThread的quit函数停止线程,线程会在执行完当前任务后退出。

    3. 暂停线程:在线程任务中使用一个标志变量控制线程的执行,当标志变量为false时,线程任务会进入等待状态,从而实现线程的暂停。

    4. 恢复线程:修改标志变量为true,从而唤醒线程任务,使线程恢复执行。

    下面是一个示例代码,展示了如何使用QThread启动、停止、暂停和恢复线程:

     
    #include <QThread>
    #include <QDebug>

    class MyThread : public QThread
    {
    public:
        MyThread() {}

        void run() override
        {
            m_running = true;
            qDebug() << "Thread started";
            while (m_running) {
                // Do some work here
                QThread::msleep(1000);
                if (!m_running) {
                    qDebug() << "Thread paused";
                    m_mutex.lock();
                    m_pauseCond.wait(&m_mutex);
                    m_mutex.unlock();
                    qDebug() << "Thread resumed";
                }
            }
            qDebug() << "Thread stopped";
        }

        void pause()
        {
            m_running = false;
        }

        void resume()
        {
            m_mutex.lock();
            m_pauseCond.wakeAll();
            m_mutex.unlock();
        }

    private:
        bool m_running = false;
        QMutex m_mutex;
        QWaitCondition m_pauseCond;
    };

    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);

        MyThread thread;
        thread.start();

        // Pause the thread after 5 seconds
        QTimer::singleShot(5000, [&thread]() {
            thread.pause();
        });

        // Resume the thread after 10 seconds
        QTimer::singleShot(10000, [&thread]() {
            thread.resume();
        });

        // Quit the thread after 15 seconds
        QTimer::singleShot(15000, [&thread]() {
            thread.quit();
        });

        return a.exec();
    }
     

    在这个示例中,我们创建了一个MyThread类,它继承自QThread,并实现了run函数和pause、resume函数。run函数是线程任务的入口点,它会在线程启动时被调用。pause和resume函数分别用于暂停和恢复线程的执行。

    在main函数中,我们创建了一个MyThread对象,并调用start函数启动线程。然后,我们使用QTimer::singleShot函数在5秒、10秒和15秒后分别调用MyThread::pause、MyThread::resume和QThread::quit函数,从而暂停、恢复和停止线程的执行。

    在MyThread类中,我们使用一个标志变量m_running来控制线程的执行。当m_running为false时,线程任务会进入等待状态,从而实现线程的暂停。在resume函数中,我们使用QWaitCondition类的wakeAll函数唤醒线程任务,使线程恢复执行。在quit函数中,线程会在执行完当前任务后退出。

    需要注意的是,在QThread的子类中使用sleep函数是不推荐的,应该使用QThread::msleep函数代替。同时,在线程任务中使用wait函数时,需要先获取一个互斥锁,以避免多个线程同时访问同一个条件变量。 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值