QWaitCondition Class Reference
[QtCore module]

该类提供一个情况变量来同步线程。
#include <QWaitCondition>
注意:该类所有的函数是线程安全的。
公共函数:
 
bool
wait ( QMutex * mutex, unsigned long time = ULONG_MAX )
bool
wait ( QReadWriteLock * readWriteLock, unsigned long time = ULONG_MAX )
void
void
详细描述:
该类允许一个线程来告诉其他线程一些种情况已经被遇到。一个或者多个线程能阻塞等待为一个QWaitCondition来设置一个情况用wakeOne()或wakeAll()。使用wakeOne()来随机唤醒一个被选择的情况或者wakeAll()来唤醒所有的。
例如,假定我们有三个任务,应该被执行,当使用者按下一个键。每个任务能被放入一个线程。每个都有一个run像这样:
forever {
     mutex.lock();
     keyPressed.wait(&mutex);
     do_something();
     mutex.unlock();
 }
这里keyPressed变量是一个全局的QWaitCondition
第四个线程将读键按下 和唤醒其他的三个线程,
forever {
     getchar();
     keyPressed.wakeAll();
 }
三个线程按顺序被唤醒时没有定义的。如果一些线程仍然在do_sth()当键被按下,他们将不被唤醒。所以任务将并不被执行。这种情况能被解决,通过使用一个counter和一个QMutex来保护她。例如:
forever {
     mutex.lock();
     keyPressed.wait(&mutex);
     ++count;
     mutex.unlock();
 
     do_something();
 
     mutex.lock();
     --count;
     mutex.unlock();
 }
下面是代码为第四个线程
forever {
     getchar();
 
     mutex.lock();
     // Sleep until there are no busy worker threads
     while (count > 0) {
         mutex.unlock();
         sleep(1);
         mutex.lock();
     }
     keyPressed.wakeAll();
     mutex.unlock();
 }
Mutex是必须的,因为两个线程的结果视图改变相同的变量的值。
等待情况是一个强大的原始线程同步。等待情况例子展示怎样使用QWaitCondition作为一个替代QSemaphore来控制进入一个循环buf被一个生产者线程和消费者线程。
成员函数文件

QWaitCondition::QWaitCondition ()

QWaitCondition::~QWaitCondition ()

bool QWaitCondition::wait ( QMutex * mutex, unsigned long time = ULONG_MAX )

释放锁定的mutex和等待waitCondition。Mutex必须被调用的线程原始锁定。如果mutex不是在一个锁定的状态,这个函数立即返回。如果mutex是一个递归的mutex,这个函数立即返回。Mutex将被解锁,调用线程将阻塞直到这些情况被遇到:
1.     另一个线程用wakeOne()或者wakeAll()发射信号。这个函数将返回true
2.     time超时。如果time是ulong_max(默认的),然后等待将绝不超时。这个函数将返回false,如果等待超时

bool QWaitCondition::wait ( QReadWriteLock * readWriteLock, unsigned long time = ULONG_MAX )

void QWaitCondition::wakeAll ()

唤醒所有在等待waitCondition的线程。唤醒的顺序依赖于操作系统的政策,不能被控制。

void QWaitCondition::wakeOne ()

唤醒一个线程,等待waitCondition的。线程的唤醒取决于操作系统的政策,不能被控制。
如果你想唤醒一个特别的线程,解决办法是使用不同的等待情况。
 
http://no001.blog.51cto.com/1142339/277010

qt翻译--QWaitCondition的更多相关文章

  1. Qt翻译---Thread Support in Qt

    Thread Support in Qt QT提供线程支持在平台独立的线程类.一个安全线程的传递事件的方式,一个信号槽的链接在线程之中.这使得开发多线程容易.多线程程序也是一个有用的范例为不冻结用户界 ...

  2. qt翻译和国际化的探讨。

    这段时间一直都在怼qt的国际化,以前也接触过国际化,但是感觉不是那么的深刻,这次是因为一个项目要做一个国际化的版本,代码里面是不能出现中文的,所以就翻译了一下.qt用的是4.8.6 64位的,IDE( ...

  3. Qt的QWaitCondition(允许线程在一定条件下唤醒其他线程,这样对不间断上传可能比较适用)

    对生产者和消费者问题的另一个解决办法是使用QWaitCondition,它允许线程在一定条件下唤醒其他线程.其中wakeOne()函数在条件满足时随机唤醒一个等待线程,而wakeAll()函数则在条件 ...

  4. (Qt 翻译) QGLAbstractScene

    QGLAbstractScene Class Reference #include <QGLAbstractScene> This class was introduced in Qt3D ...

  5. (Qt 翻译) QGLSceneNode

    #include <QGLSceneNode> QGLSceneNode ( QObject * parent = 0 ) QGLSceneNode ( const QGeometryDa ...

  6. qt 国际化(翻译时会触发changeEvent)

    1. 修改工程文件 .pro ,加入翻译源文件 hello_world.ts: TRANSLATIONS += \        Resource/translations/hello_world.t ...

  7. Qt 本地化(翻译)

    Qt 本地化(翻译) 翻译流程大致是这样的:首先源代码产生 ts 文件,然后送给 Qt Linguist(Qt 语言家)这个 Qt 自带的小工具进行处理产生 qm 翻译文件,最后源代码里加载这个 qm ...

  8. Qt Installer Framework翻译(5-4)

    自定义安装程序 您可以使用脚本通过以下方式来自定义安装程序: > 添加Qt Installer Framework操作,该操作由脚本提供,并由安装程序执行. > 添加新页面,该页面由您在p ...

  9. Qt学习之路(34): 国际化(下)

      原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://devbean.blog.51cto.com/448512/245063 上次 ...

随机推荐

  1. php重建二叉树(函数缺省参数相关的都写在后面,比如array_slice函数中的$length属性,故第一个参数是操作的数组)

    php重建二叉树(函数缺省参数相关的都写在后面,比如array_slice函数中的$length属性,故第一个参数是操作的数组) 一.总结 牛客网和洛谷一样,是真的好用 二.php重建二叉树 输入某二 ...

  2. mjpg-streamer摄像头远程传输UVC

    mjpg-streamer摄像头远程传输UVC 1 下载源代码 mjpg-streamer的源代码地址  https://github.com/codewithpassion/mjpg-streame ...

  3. Opencv在视频中静态、动态方式绘制矩形框ROI

    Opencv视频处理中的目标跟踪经常用到要在视频上画一个矩形框ROI,标注出要跟踪的物体,这里介绍两种在视频中绘制矩形框的方法,一种是"静态的",一种是"动态的" ...

  4. php实现字符串的排列(交换)(递归考虑所有情况)

    php实现字符串的排列(交换)(递归考虑所有情况) 一.总结 交换: 当有abc的时候,分别拿第一位和其它位交换,第一位固定,余下的位做递归,这样有考虑到所有情况,因为第一位只可能是所有的字母,那第一 ...

  5. JS表格分页组件:fupage的设计思路和具体用法(未来考虑开源,争取在2015年)

    一.背景         之前在秒针工作的时候,某js高级工程师写了很多自己的组件,其中一套是分页组件,叫做st-grid.不过在我看来,bug太多,我经常给他反馈bug,我也不清楚为啥别人没有发现. ...

  6. Expression Blend 的点滴(4)--创建类似iPhone屏幕锁控件(下)

    原文:Expression Blend 的点滴(4)--创建类似iPhone屏幕锁控件(下) 接着上篇... 接下去,将一步步演示如果创建当点击checkBox后,其中的按钮由左边滑动到右边,表示处于 ...

  7. 【BZOJ 1017】 [JSOI2008]魔兽地图DotR

    [题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1017 [题意] [题解] 设f[i][j][k] 表示第i个节点以下的总花费为j, 然 ...

  8. Linux环境编写脚本安装配置JDK,Tomcat,含Tomcat自启动

    mkdir /usr/java mkdir /znywImage cp -f /usr/jdk-7u79-linux-x64.tar.gz /usr/java tomcatPath=/usr/apac ...

  9. shell脚本一键安装mysql5.7.x(免安装版)

    使用脚本一键安装mysql5.7.x,初始化数据库,启动数据库---- mysql版本:源码mysql5.7.10 linux版本:centos6.5 x86_64 #!/bin/bash GROUP ...

  10. vuex的简单例子和vue model组件

    好久没用过vuex了,vuex官方示例的计算器counter是用的webpack打包了单文件组件,不方便回顾,今天把代码改成了html引人的方式,方便回顾 <!DOCTYPE html> ...