c++ qt 多线程消息队列
时间: 2023-08-01 19:09:31 浏览: 225
在 C++ Qt 中,可以使用 `QThread` 和 `QRunnable` 来实现多线程消息队列。
首先,需要创建一个继承自 `QRunnable` 的子类,该子类需要实现 `run()` 方法。`run()` 方法中可以在一个循环中不断地从消息队列中取出消息并处理。
```
class MyRunnable : public QRunnable
{
public:
void run() override {
while (true) {
// 从消息队列中取出消息
QMutexLocker locker(&m_mutex);
if (m_messages.isEmpty()) {
m_condition.wait(&m_mutex);
}
QString message = m_messages.dequeue();
// 处理消息
qDebug() << message;
}
}
void addMessage(const QString& message) {
QMutexLocker locker(&m_mutex);
m_messages.enqueue(message);
m_condition.wakeOne();
}
private:
QMutex m_mutex;
QWaitCondition m_condition;
QQueue<QString> m_messages;
};
```
接下来,需要创建一个 `QThreadPool` 对象,并将 `MyRunnable` 对象添加到线程池中。
```
QThreadPool threadPool;
threadPool.setMaxThreadCount(5);
MyRunnable* runnable = new MyRunnable();
threadPool.start(runnable);
```
然后,在主线程中可以通过 `addMessage()` 方法向消息队列中添加消息。
```
runnable->addMessage("Hello, world!");
```
这样就可以实现一个简单的多线程消息队列了。注意要在程序退出前调用 `threadPool.waitForDone()` 等待所有线程结束。
阅读全文