可以看到Qt提供了一个等待事件发生的类QWaitCondition,当条件满足时可以唤醒其它等待的线程。

写一个类可以在线程间实现同步功能

#ifndef THREADEVENT_H
#define THREADEVENT_H #include <QWaitCondition>
#include <QMutex> class ThreadEvent
{
public:
ThreadEvent(const char* name);
void postMessage();
bool waitMessage(unsigned long time = ULONG_MAX);
private:
QWaitCondition waitConditionM;
QMutex mutexM;
char Name[64];
bool bSatisfiedM;
}; #endif // THREADEVENT_H
#include "ThreadEvent.h"

ThreadEvent::ThreadEvent(const char* name)
{
bSatisfiedM = false;
strcpy(Name,name);
} void ThreadEvent::postMessage()
{
qDebug("ThreadEvent: %s\n",Name);
mutexM.lock();
bSatisfiedM = true;
waitConditionM.wakeAll();
mutexM.unlock();
} bool ThreadEvent::waitMessage(unsigned long time)
{
mutexM.lock();
bool rtn = true;
if(bSatisfiedM)
{
rtn = true;
}
else
{
rtn = waitConditionM.wait(&mutexM,time); } bSatisfiedM = false;
mutexM.unlock();
return rtn;
}

用法

ThreadEvent tevent;

thread1:
tevent.postMessage(); thread2:
tevent.waitMessage();

不管是thread1先到tevent,还是thread2先到tevent,这个类都可满足要求。

最新文章

  1. 初次尝试用Kotlin实现Android项目
  2. 浅析Java.lang.Runtime类
  3. Python自动化运维工具fabric的安装
  4. Delphi 使用之dll文件生成与调用
  5. Cryptopp iOS 使用 RSA加密解密和签名验证签名
  6. phpwind数据同步本地之后板块排版乱
  7. Newtonsoft.Json.dll解析json的dll文件使用
  8. J - Borg Maze - poj 3026(BFS+prim)
  9. UVA11100- The Trip, 2007
  10. Ambari安装组件出错
  11. 201671010142 2017-2 《java第十一章学习感悟》
  12. mysql数据库的优化和查询效率的优化
  13. mysql 8.0 ~ innodb与变量优化
  14. xStream解析生成xml文件学习资料
  15. C# SetParent将其他程序嵌入自己的程序
  16. 前端在js中获取用户所在地区的时间与时区
  17. 【转载】MSXML应用总结 概念篇
  18. 【转】简述TCP的三次握手过程
  19. PyCharm2018激活码
  20. java 并发——线程

热门文章

  1. IT忍者神龟之Oracle DBA经常使用查询吐血列举
  2. cocos2d-x2.0 win7第一次创建项目需要调用到的脚本(不断更新维护)//cocos2d-x 教程一
  3. 使用最新的log4cplus(1.1.1)隔离不同的 log 文件输出
  4. HDU1686——Oulipo
  5. 编写一个void sort(int*x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件
  6. U盘只剩下快捷方式
  7. Android KeyCode(官方)
  8. 简单理清一下proto与prototype
  9. GreenDao数据库结构升级
  10. Python中的继承