背景: 之前 只知道个 QWaitCondition 用于同步不同的线程运行状态。但不知道为何这样做。为什么还要在QWaitcondition.wai( )中还要传入一个 QMutext 变量的指针。
QWaitCondition.wait 的工作原理:
- QWaitCondition.wait 的工作原理:
伪代码
Qmutex mutex;
QwaitCondition cond;
bool statFlag=false;
QmutextLocker lock(&mutex);
While(!statFlag) //A
{
cond.wait(&mutex);{ 解锁mutex //B
其他线程趁此时可以修改statFlag的值
wait()退出是 再锁定 mutex (其他线程不能修改statFlag值)
}**
}
//C…
这样通过While循环不断的检测statFlag值 确定是否退出该while循环,以便执行 C处代码
- 这也说明了为何用while 而不用if 来判断 statFlag 来达到阻塞当前线程的目的。如果if :假如其他线程没有修改 statFlag的值,也会导致线程继续执行下去。而不会达到阻塞的目的