背景: 之前 只知道个 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的值,也会导致线程继续执行下去。而不会达到阻塞的目的
posted on 2024-10-30 14:43  keleman  阅读(4)  评论(0编辑  收藏  举报