QWaitCondition和qmutex一同使用的简单例子
时间: 2024-10-21 07:18:19 浏览: 19
`QWaitCondition`和`QMutex`是Qt库中的同步机制,它们通常一起用于线程间的协作,尤其是在需要等待特定条件后再继续执行的情况下。下面是一个简单的例子:
```cpp
#include <QThread>
#include <QMutex>
#include <QWaitCondition>
class WorkerThread : public QThread {
public:
explicit WorkerThread(QMutex& mutex, QWaitCondition& condition)
: mutex(mutex), condition(condition) {}
private:
void run() override {
// 这里模拟一些耗时的操作
for (int i = 0; i < 5; ++i) {
qDebug() << "Worker Thread is doing some work...";
// 加锁
mutex.lock();
// 模拟完成工作并通知主线程
if (someConditionIsMet()) {
qDebug() << "Work completed, signaling main thread.";
condition.wakeOne(); // 醒通知一个等待的线程
}
// 释放锁
mutex.unlock();
qSleep(100); // 等待100毫秒
}
}
QMutex& mutex;
QWaitCondition& condition;
signals:
void workCompleted();
};
// 主线程
class MainThread : public QObject {
public slots:
void startWorking() {
QMutexLocker locker(&mutex);
workerThread.start();
// 在这里等待工作完成
while (!workerThread.isFinished()) {
condition.wait(mutex);
}
workerThread.workCompleted(); // 收到信号后处理
}
private:
QMutex mutex;
WorkerThread workerThread;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainThread mainThread;
mainThread.startWorking();
return app.exec();
}
```
在这个例子中,`WorkerThread`在一个单独的线程中运行,它持有`QMutex`,当工作完成后会唤醒主线程。主线程通过`QWaitCondition`等待`workCompleted()`信号,只有当`WorkerThread`的工作结束才会解除等待。这展示了如何在多线程环境下使用`QWaitCondition`和`QMutex`确保线程安全。
阅读全文