在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助手提供,问题来源于学员提问