#include <QCoreApplication>
#include <thread>
#include <QWaitCondition>
#include <iostream>
#include <QThread>
#include <QMutex>
#include <queue>
using namespace std;
QMutex mutex1;
QWaitCondition condition;
int test = 0;
void sendData()
{
while(1)
{
mutex1.lock();
/*
* 执行到此处 线程等待并 将mutex1暂时解锁
* recvData执行wakeAll之后应该立即加锁返回向下执行但是 此时的锁 在recvData线程中并未被释放,,所以
* 需要等到recvData释放锁之后,wait才能拿到锁 继续向下执行
*/
condition.wait(&mutex1);//注意必须传入一个拿到锁的 QMutex对象
cout << "sendData " << test++ << endl;
mutex1.unlock();
}
}
void recvData()
{
while(1)
{
mutex1.lock();
condition.wakeAll();
QThread::msleep(2000);
mutex1.unlock();
cout <<"recvData " << test++ << endl;
}
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
thread t1(sendData);
t1.detach();
thread t2(recvData);
t2.detach();
return a.exec();
}
QWaitCondition使用小结
最新推荐文章于 2024-02-14 17:13:28 发布