Qt线程同步操作用QWaitCondition QMutex
2024-10-18 22:27:40
可以看到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,这个类都可满足要求。
最新文章
- 初次尝试用Kotlin实现Android项目
- 浅析Java.lang.Runtime类
- Python自动化运维工具fabric的安装
- Delphi 使用之dll文件生成与调用
- Cryptopp iOS 使用 RSA加密解密和签名验证签名
- phpwind数据同步本地之后板块排版乱
- Newtonsoft.Json.dll解析json的dll文件使用
- J - Borg Maze - poj 3026(BFS+prim)
- UVA11100- The Trip, 2007
- Ambari安装组件出错
- 201671010142 2017-2 《java第十一章学习感悟》
- mysql数据库的优化和查询效率的优化
- mysql 8.0 ~ innodb与变量优化
- xStream解析生成xml文件学习资料
- C# SetParent将其他程序嵌入自己的程序
- 前端在js中获取用户所在地区的时间与时区
- 【转载】MSXML应用总结 概念篇
- 【转】简述TCP的三次握手过程
- PyCharm2018激活码
- java 并发——线程
热门文章
- IT忍者神龟之Oracle DBA经常使用查询吐血列举
- cocos2d-x2.0 win7第一次创建项目需要调用到的脚本(不断更新维护)//cocos2d-x 教程一
- 使用最新的log4cplus(1.1.1)隔离不同的 log 文件输出
- HDU1686——Oulipo
- 编写一个void sort(int*x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件
- U盘只剩下快捷方式
- Android KeyCode(官方)
- 简单理清一下proto与prototype
- GreenDao数据库结构升级
- Python中的继承