QT开发中文网

qt条件变量使用

在Qt中,条件变量可以使用QWaitCondition类来实现。条件变量用于线程之间的同步和通信,允许一个线程等待另一个线程满足特定条件。

以下是一个使用Qt条件变量的示例代码:

#include <QCoreApplication>
#include <QThread>
#include <QDebug>
#include <QMutex>
#include <QWaitCondition>

// 全局共享数据
int sharedData = 0;

// 互斥锁和条件变量
QMutex mutex;
QWaitCondition condition;

// 生产者线程类
class ProducerThread : public QThread
{
public:
    void run() override
    {
        for (int i = 0; i < 5; ++i)
        {
            // 对共享数据进行加锁保护
            mutex.lock();
            
            // 如果共享数据不为0,则等待消费者消费完毕
            while (sharedData != 0)
                condition.wait(&mutex);
            
            // 生产数据并更新共享数据
            qDebug() << "Producing data: " << i;
            sharedData = i + 1;
            
            // 发送信号通知消费者有新数据可用
            condition.wakeAll();
            
            mutex.unlock();
        }
    }
};

// 消费者线程类
class ConsumerThread : public QThread
{
public:
    void run() override
    {
        for (int i = 0; i < 5; ++i)
        {
            // 对共享数据进行加锁保护
            mutex.lock();
            
             // 如果共享数据为0,则等待生产者生产数据
            while (sharedData == 0)
                condition.wait(&mutex);
            
            // 消费数据并更新共享数据
            qDebug() << "Consuming data: " << sharedData;
            sharedData = 0;
            
             // 发送信号通知生产者可以继续生产
            condition.wakeAll();
            
            mutex.unlock();
        }
    }
};

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

    ProducerThread producerThread;
    ConsumerThread consumerThread;

    producerThread.start();
    consumerThread.start();

    producerThread.wait();
    consumerThread.wait();

    return a.exec();
}

在这个例子中,有一个生产者线程和一个消费者线程。通过互斥锁(QMutex)和条件变量(QWaitCondition),实现了生产者和消费者之间的同步。当共享数据为0时,消费者等待,而当共享数据不为0时,生产者等待。使用condition.wait()来阻塞线程,并使用condition.wakeAll()发送信号来唤醒等待的线程。

请注意,在实际应用中,需要根据具体需求对代码进行适当修改和完善。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?