在qt5中使用消息队列
时间: 2023-09-04 09:16:38 浏览: 443
在 Qt5 中,可以使用 QMessageQueue 类来实现消息队列的功能。QMessageQueue 是一个线程安全的队列,可以用于在不同的线程之间传递数据。
以下是一个简单的示例,演示如何在两个线程之间使用 QMessageQueue 传递数据:
```cpp
#include <QCoreApplication>
#include <QThread>
#include <QMessageQueue>
class Producer : public QThread
{
public:
Producer(QMessageQueue<int>* queue) : m_queue(queue) {}
void run() override
{
for (int i = 0; i < 10; ++i) {
m_queue->enqueue(i);
qDebug() << "Produced: " << i;
msleep(1000);
}
}
private:
QMessageQueue<int>* m_queue;
};
class Consumer : public QThread
{
public:
Consumer(QMessageQueue<int>* queue) : m_queue(queue) {}
void run() override
{
while (true) {
int value;
if (m_queue->tryDequeue(&value)) {
qDebug() << "Consumed: " << value;
}
msleep(500);
}
}
private:
QMessageQueue<int>* m_queue;
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QMessageQueue<int> queue;
Producer producer(&queue);
Consumer consumer(&queue);
producer.start();
consumer.start();
return a.exec();
}
```
在此示例中,Producer 类是一个生产者线程,它将整数值添加到队列中,并打印生产的值。Consumer 类是一个消费者线程,它从队列中读取整数值,并打印消耗的值。main() 函数创建一个 QMessageQueue 对象,然后创建 Producer 和 Consumer 对象,将它们连接到队列并启动它们的线程。
在生产者线程中,我们使用 enqueue() 方法将值添加到队列中。在消费者线程中,我们使用 tryDequeue() 方法从队列中读取值。由于 QMessageQueue 是线程安全的,因此我们可以在不同的线程之间安全地使用它来传递数据。
阅读全文