首页 > 其他 > 详细

Qt的QWaitCondition了解一下吧

时间:2020-08-19 14:27:40      阅读:62      评论:0      收藏:0      [点我收藏+]

 QWaitConditon也是用来同步线程的。从名字来看是等待条件,意思就是线程阻塞在等待条件的地方,直到条件满足才继续执行下去。等待条件的线程可以是一个或者多个。用QWaitCondition的函数表示过程如下:

    1.等待条件的线程调用QWaitCondition::wait()阻塞。

    2.实现条件的线程通过计算完成条件后调用QWaitConditon::wakeOne()或者QWaitCondition::wakeAll()。

    3.当2中调用wake之后,继续执行wait之后的操作。

    其中wakeOne会随机唤醒等待的线程中的一个。wakeAll会唤醒所有的等待线程。

    

    写个例子测试一下:

    1.创建两个线程类Thread和ThreadTwo, Thread用来等待,ThreadTwo来唤醒。两个类的run函数分别如下:

    技术分享图片

 

    技术分享图片

    Thread的run函数功能就是等待被唤醒,然后输出一句话。ThreadTwo的run函数就是每隔2秒唤醒一次。

    2.创建2个Thread类的对象,和1个ThreadTwo的对象,并调用start。然后查看执行情况。

    技术分享图片

    技术分享图片

    程序运行后会按上图中箭头所划分,每两秒输出一部分。也就是说ThreadTwo每两秒唤醒了一个Thread的线程。如果ThreadTwo调用的是wakeAll函数那么在输出0时两个线程都被唤醒,运行结果如下:

    技术分享图片

     说明:由于ThreadTwo的run函数中先调用了sleep确保了wake会在Thread的wait之后发生,因此没有使用QMutex来保证他们的执行顺序。

转自:https://www.fearlazy.com/index.php/post/101.html

Qt的QWaitCondition了解一下吧

原文:https://www.cnblogs.com/liushui-sky/p/13528915.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!