当前位置 博文首页 > fearlazy:Qt的QWaitCondition了解一下吧

    fearlazy:Qt的QWaitCondition了解一下吧

    作者:[db:作者] 时间:2021-06-18 18:38

    原文链接:http://www.fearlazy.com/index.php/post/101.html

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

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

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

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

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

    ????

    ????写个例子测试一下:

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

    ????blob.png

    ?

    ? ??blob.png

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

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

    ? ??blob.png

    ????blob.png

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

    ????blob.png

    ????

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

    ????

    下一篇:没有了