QT开发中文网

用qt c++ 控制台程序创建两个线程A和线程B,A线程运行时B挂起,B线程运行时A挂起,可以来回切换

下面是一个使用Qt C++创建两个线程A和线程B,并实现来回切换的示例代码:

#include <QCoreApplication>
#include <QThread>

// 自定义线程A类
class ThreadA : public QThread
{
public:
    void run() override {
        while (true) {
            qDebug("Thread A is running...");
            msleep(1000); // 暂停1秒

            // 挂起自己,让线程B运行
            mutex.lock();
            condition.wait(&mutex);
            mutex.unlock();
        }
    }
};

// 自定义线程B类
class ThreadB : public QThread
{
public:
    void run() override {
        while (true) {
            qDebug("Thread B is running...");
            msleep(1000); // 暂停1秒

            // 挂起自己,让线程A运行
            mutex.lock();
            condition.wait(&mutex);
            mutex.unlock();
        }
    }
};

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

    ThreadA threadA;
    ThreadB threadB;

    // 启动线程A和线程B
    threadA.start();
    threadB.start();

    while (true) {
        // 主线程每隔2秒发出唤醒信号,切换到另一个线程运行
        QThread::sleep(2);
        
        if (threadA.isRunning()) {
          qDebug("Wake up Thread A!");
          threadA.mutex.lock();
          threadA.condition.wakeAll();  // 唤醒线程A
          threadA.mutex.unlock();
        } else if (threadB.isRunning()) {
          qDebug("Wake up Thread B!");
          threadB.mutex.lock();
          threadB.condition.wakeAll();  // 唤醒线程B
          threadB.mutex.unlock();
        }
    }

    return a.exec();
}

这个示例使用了QThread类创建了两个自定义线程类ThreadAThreadB,分别实现了各自的运行逻辑。在主函数中,首先启动了这两个线程,并通过定时器方式定期发送唤醒信号,来回切换线程的运行。

请注意,在上述代码中使用了互斥锁(QMutex)和条件变量(QWaitCondition)来控制线程间的挂起与唤醒操作。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://qt.0voice.com/?id=11750

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?