帮我写一个 qt 5.15.2 多线程队列
时间: 2023-04-05 19:01:23 浏览: 229
好的,我可以回答这个问题。以下是一个简单的 Qt 5.15.2 多线程队列的示例代码:
```c++
#include <QCoreApplication>
#include <QThread>
#include <QMutex>
#include <QWaitCondition>
#include <QDebug>
#include <QQueue>
class Worker : public QObject
{
Q_OBJECT
public:
Worker(QQueue<int> *queue, QMutex *mutex, QWaitCondition *condition)
: m_queue(queue), m_mutex(mutex), m_condition(condition)
{
}
public slots:
void process()
{
while (true) {
m_mutex->lock();
while (m_queue->isEmpty()) {
m_condition->wait(m_mutex);
}
int value = m_queue->dequeue();
m_mutex->unlock();
qDebug() << "Processing value:" << value;
}
}
private:
QQueue<int> *m_queue;
QMutex *m_mutex;
QWaitCondition *m_condition;
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QQueue<int> queue;
QMutex mutex;
QWaitCondition condition;
Worker worker(&queue, &mutex, &condition);
QThread thread;
QObject::connect(&thread, &QThread::started, &worker, &Worker::process);
thread.start();
for (int i = 0; i < 10; i++) {
mutex.lock();
queue.enqueue(i);
condition.wakeOne();
mutex.unlock();
}
return a.exec();
}
#include "main.moc"
```
这个示例代码创建了一个 `Worker` 类,它会在一个单独的线程中处理队列中的元素。主线程向队列中添加了 10 个整数,然后等待应用程序退出。在 `Worker` 类中,我们使用了 `QMutex` 和 `QWaitCondition` 来实现线程同步和等待条件。当队列为空时,`Worker` 线程会等待条件变量,直到主线程向队列中添加了新的元素并唤醒了等待的线程。
希望这个示例代码能够帮助你实现一个简单的多线程队列。
阅读全文