当前位置: 首页 > news >正文

Qt信号量用于对共享资源进行同步

定义信号量与缓冲区:

const int BufferSize = 8;
int buffer1[BufferSize];
int buffer2[BufferSize];
int curBuf=1; //当前正在写入的Bufferint bufNo=0; //采集的缓冲区序号quint8   counter=0;//数据生成器QSemaphore emptyBufs(2);//信号量:空的缓冲区个数,初始资源个数为2
QSemaphore fullBufs; //满的缓冲区个数,初始资源为0

生产者线程:

void QThreadDAQ::run()
{m_stop=false;//启动线程时令m_stop=falsebufNo=0;//缓冲区序号curBuf=1; //当前写入使用的缓冲区counter=0;//数据生成器int n=emptyBufs.available();if (n<2)  //保证 线程启动时emptyBufs.available==2emptyBufs.release(2-n);while(!m_stop)//循环主体{emptyBufs.acquire();//获取一个空的缓冲区for(int i=0;i<BufferSize;i++) //产生一个缓冲区的数据{if (curBuf==1)buffer1[i]=counter; //向缓冲区写入数据elsebuffer2[i]=counter;counter++; //模拟数据采集卡产生数据msleep(50); //每50ms产生一个数}bufNo++;//缓冲区序号if (curBuf==1) // 切换当前写入缓冲区curBuf=2;elsecurBuf=1;fullBufs.release(); //有了一个满的缓冲区,available==1}quit();
}

消费者线程:

void QThreadShow::run()
{m_stop=false;//启动线程时令m_stop=falseint n=fullBufs.available();if (n>0)fullBufs.acquire(n); //将fullBufs可用资源个数初始化为0while(!m_stop)//循环主体{fullBufs.acquire(); //等待有缓冲区满,当fullBufs.available==0阻塞int bufferData[BufferSize];int seq=bufNo;if(curBuf==1) //当前在写入的缓冲区是1,那么满的缓冲区是2for (int i=0;i<BufferSize;i++)bufferData[i]=buffer2[i]; //快速拷贝缓冲区数据elsefor (int i=0;i<BufferSize;i++)bufferData[i]=buffer1[i];emptyBufs.release();//释放一个空缓冲区emit    newValue(bufferData,BufferSize,seq);//给主线程传递数据}quit();
}

http://www.lryc.cn/news/228472.html

相关文章:

  • 在报错中学python something
  • 如何调用 DBMS_DISKGROUP 对 ASM 文件进行随机读取
  • UART学习
  • 洗地机哪个牌子最好用?洗地机品牌排行榜
  • 国际阿里云:Windows实例中数据恢复教程!!!
  • 浅谈二叉树
  • (二) 用QWebSocket 实现服务端和客户端(详细代码直接使用)
  • 关于我在配置zookeeper出现,启动成功,进程存在,但是查看状态却没有出现Mode:xxxxx的问题和我的解决方案
  • react及相关面试问题汇总
  • QT4到QT5移植出现的一些问题
  • 【可解释AI】Alibi explain: 解释机器学习模型的算法
  • No191.精选前端面试题,享受每天的挑战和学习
  • ROS基础—vscode创建工作空间
  • 机器学习复习(待更新)
  • taro(踩坑) npm run dev:weapp 微信小程序开发者工具预览报错
  • 3. 深度学习——损失函数
  • 交叉编译 openssl
  • C++文件的读取和写入
  • 住宅IP、家庭宽带IP以及原生IP,它们有什么区别?谷歌开发者账号应选择哪种IP?
  • Linux内核分析(十三)--内存管理之I/O交换与性能调优
  • 前端使用webscoket
  • centos安装Git
  • 网络编程 初探windows编程
  • Vue3 ref函数和reactive函数
  • docker常用命令详解
  • 采集Prestashop独立站采集Prestashop独立站
  • 2023.11-9 hive数据仓库,概念,架构,元数据管理模式
  • MFC 简单绘图与文本编辑
  • C# 中的 SerialPort
  • 2022年06月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试