C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++ QT QThread启动停止

C++ QT QThread启动、停止、暂停和恢复的实现

作者:睡不着睡不着睡不着

本文主要介绍了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函数时,需要先获取一个互斥锁,以避免多个线程同时访问同一个条件变量。 

到此这篇关于C++ QT QThread启动、停止、暂停和恢复的实现的文章就介绍到这了,更多相关C++ QT QThread启动停止内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文