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. Gora快速入门 分类: C_OHTERS 2015-01-30 09:55 465人阅读 评论(0) 收藏

    概述 Gora是apache的一个开源项目. The Apache Gora open source framework provides an in-memory data model and pe ...

  2. QMap 的增删改查

    map 是一种数据容器,它提供一种由key 到 value 的映射.map 的key 是唯一的, 也是有序的.map 通常由近似平衡的红黑树来实现.key 的有序性,使得插入,查找节点比较有效.map ...

  3. 【死磕Java并发】—–J.U.C之AQS(一篇就够了)

    [隐藏目录] 1 独占式 1.1 独占式同步状态获取 1.2 独占式获取响应中断 1.3 独占式超时获取 1.4 独占式同步状态释放 2 共享式 2.1 共享式同步状态获取 2.2 共享式同步状态释放 ...

  4. 【u017】请柬

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 在电视时代,没有多少人观看戏剧表演.Malidinesia古董喜剧演员意识到这一事实,他们想宣传剧院, ...

  5. Hibernate之HQL检索(查询)方式

    HQL(Hibernate Query Language)是面向对象的查询语言,与SQL非常相似.在Hibernate中,HQL是使用最广泛的检索方式. 具有下面经常使用功能: (1)在查询语句中,能 ...

  6. Yii学习笔记之四(表单验证 api 翻译)

    1.表单验证 对于用户输入的全部数据,你不能信任,必须加以验证. 全部框架如此.对于yii 能够使用函数  yii\base\Model::validate()  进行验证 他会返回boolean值的 ...

  7. 使用Fernflower 比较准确的反编译整个java项目

    以前一直使用jd-gui.exe  ,都说是最好用的,但是编译总是有问题,还得修改,使用idea 后,感觉反编译的相当好,看注释是 Fernflower,然后参考 http://the.bytecod ...

  8. [Angular] Dynamic components with ComponentFactoryResolver

    To create a component dynamicly. 1. Add a container with ref: @Component({ selector: 'app-root', tem ...

  9. html5--1.12表格详解

    html5--1.12表格详解 一.总结 一句话总结: 二.详解 1.表格构成三个基本要素 table:表格的范围,外框:用来定义表格,表格的其他元素包含在table标签里面: tr: 表格的行: t ...

  10. 谷歌 AI 中国中心成立,人工智能势不可挡?

    昨日,谷歌在上海举办了一年一度的Google中国开发者大会.在本届大会上,谷歌云首席科学家李飞飞宣布了一个重磅消息,即在北京将成立谷歌AI中国中心.对于这个即将成立的AI中心谷歌寄予厚望,希望与中国本 ...