qt翻译--QWaitCondition

QWaitCondition Class Reference
[QtCore module]

该类提供一个情况变量来同步线程。

#include <QWaitCondition>

注意:该类所有的函数是线程安全的。

公共函数:


QWaitCondition ()

 

~QWaitCondition ()

bool

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

bool

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

void

wakeAll ()

void

wakeOne ()

详细描述:

该类允许一个线程来告诉其他线程一些种情况已经被遇到。一个或者多个线程能阻塞等待为一个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

时间: 2024-08-02 11:01:30

qt翻译--QWaitCondition的相关文章

QT翻译上下文

QT翻译机制还是比较复杂的,实际翻译调用的是QCoreApplication的translate,如下: translate的参数除了翻译的原文之外,另外还有一个很重要的是context(也就是上下文), 下面来看如下场景的写法,例如我边写了一个类,从QObject派上,而且加上了Q_OBJECT的宏,则演示代码如下: namespace FirstLevel { namespace SecondLevel{ MyClass::MyClass() { } void MyClass:doSomet

Qt翻译---Thread Support in Qt

Thread Support in Qt QT提供线程支持在平台独立的线程类.一个安全线程的传递事件的方式,一个信号槽的链接在线程之中.这使得开发多线程容易.多线程程序也是一个有用的范例为不冻结用户界面情况下的耗时的操作. 推荐阅读: 这个文件打算给有多线程的知识和经验的读者.如果你是新手,看我们推荐的阅读清单. Threads Primer: A Guide to Multithreaded Programming Thread Time: The Multithreaded Programm

The Graphics View Coordinate System(Qt翻译)

Graphics View以笛卡尔坐标系为基础,items在scene上的位置和几何结构由x坐标和y坐标表示.当我们用未转置的view来观察scene时,scene中的一个单元由屏幕中的一个像素表示. 注:由于Graphics Views使用Qt的坐标系,y轴反向(y轴正方向向上)的坐标系是不支持的. Graphics View中有三个实用的坐标系:item坐标系.scene坐标系和view坐标系. 为了简化坐标系相关代码,Graphics View提供了便捷的函数,以方便在三个坐标系间转换.

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

1. 修改工程文件 .pro ,加入翻译源文件 hello_world.ts: TRANSLATIONS += \        Resource/translations/hello_world.ts 写代码时需要注意下面两点:  2. 源码用 utf-8 字符集3. 源码中需要翻译的字符串必须用英文(不能有中文或其它语言),则需要用 tr()  函数.  例如: QMessageBox::information(this,tr("Information"),tr("Hel

Qt Installer Framework翻译(5-4)

自定义安装程序 您可以使用脚本通过以下方式来自定义安装程序: > 添加Qt Installer Framework操作,该操作由脚本提供,并由安装程序执行. > 添加新页面,该页面由您在package.xml文件中指定,并将其放置在packages文件夹中. > 修改现有页面,通过插入自定义用户界面元素来作为子部件. > 添加语言变体. 您可以同时使用组件脚本和控制脚本来自定义安装程序.通过在组件的package.xml文件的Script元素中指定组件脚本,可以将该脚本与特定的组件

qt 国际化

1. 修改工程文件 .pro ,加入翻译源文件 hello_world.ts: TRANSLATIONS += \ Resource/translations/hello_world.ts 写代码时需要注意下面两点: 2. 源码用 utf-8 字符集 3. 源码中需要翻译的字符串必须用英文(不能有中文或其它语言),则需要用 tr()  函数. 例如: QMessageBox::information(this,tr("Information"),tr("Hello world

Qt程序使用QtitanRibbon库的RibbonPage的Alt键

Ribbon风格的应用程序一般存在如下操作方式: 在Ribbon程序的主界面中按下Alt键会在RibbonPage页面名称下方显示一个或多个字母, 表示继续点击这组字母可以显示该RibbonPage内的各个菜单项的键盘快捷键,进而通过按下键盘上的指定键位触发响应的Ribbon菜单项.如下图所示: 如果使用MFC编写Ribbon程序,可以在Visual Studio中轻松地指定RibbonPage按下Alt快捷键后显示的提示字母.然而项目使用Qt + Qtitan Ribbon库构建Ribbon程

Qt SQL Programming 部分翻译

简介: Qt SQL 是 Qt 的重要模块之一,为了方便,Qt 对 SQL 进行了一系列的封装,并将 SQL API 分为如下三层: (1)驱动层 (2)SQL API 层 (3)用户接口层 目录: 一.使用前提 二.数据库类 三.连接到数据库 · SQL 数据库驱动 四.执行 SQL 语句 · Qt 支持的数据库系统的数据类型 五.使用 SQL Model 类 一.使用前提: (1)在C++文件中加入相应头文件 #include <QtSql> (2)在Qt 工程文件中加入Qt SQL 模块

Qt的翻译文件QTranslator不能使用问题总结(原)

笔者今天在自己工程中使用翻译文件,发现没有起作用,反复查找,发现是用宏定义了命名空间,生成.ts文件时,不会加上命名空间,所以生成的.qm文件在实际使用时,会无法找到对应的语句. 如果将宏定义的命名空间修改为普通字符,则没有上述问题. 刚才是namespace MyProject{ 是用#define USNS namespace MyProject{定义好宏,直接使用宏的,所以生成文件,不能自己将宏转换导致 总结一下翻译碰到要注意的几个问题: 1,基本使用 QTextCodec * textC