相关头文件和函数

#include <condition_variable>

#include <mutex>

std::condition_variable()

std::wait()

std::notify_one()

std::notify_all()

#include<iostream>
#include<thread>
#include<vector>
#include<list>
#include<mutex>using namespace std;class A
{
public://把收到的消息,入到一个队列中void inMsgRecvQueue(){int i;for (i = 0; i < 100000; ++i){cout << "push_back num = " << i << endl;//lock之后只能有一个线程可以对msgQueue队列做操作unique_lock<mutex> my_unique_lock(my_mutex);msgQueue.push_back(i);                   //数字i就是玩家的命令。cond.notify_one();        //如果相应线程再阻塞,则将wait的线程唤醒。如果没有阻塞,则没有作用。}}//把数据从消息队列中取出void outMsgRecvQueue(){int command = 0;while (true){std::unique_lock<mutex> sbguard1(my_mutex);//用来判断第二个参数的条件,如果返回值是false,那么wait将解锁互斥量,并阻塞到本行。//直到其他线程调用notify_one或者notify_all唤醒此线程为止。如果wait不写第二个参数,默认第二个参数返回false。//如果第二个参数返回true,则继续往下执行。//阻塞后被别人唤醒后,wait就会不断的尝试重新获得互斥量锁。拿到锁后,再去判断第二个参数条件。//如果阻塞后被唤醒没有第二个参数的情况下,这个时候第二个参数默认是true。//这种方式可以减少资源消耗,不用一直判断队列是否为空。cond.wait(sbguard1, [this] {if (!msgQueue.empty()){return true;}else{return false;}});command = msgQueue.front();msgQueue.pop_front();sbguard1.unlock();cout << "command = " << command << endl;}}private:list<int> msgQueue;mutex my_mutex;       //创建一个互斥量std::condition_variable cond;
};int main()
{A myobj;thread myOutMsg(&A::outMsgRecvQueue, std::ref(myobj));   //保证线程中用的同一个对象thread myInMsg(&A::inMsgRecvQueue, std::ref(myobj));myOutMsg.join();myInMsg.join();cout << "main thread end..." << endl;return 0;
}

c/c++ notify/wait 消息机制相关推荐

  1. Windows消息机制要点

    1. 窗口过程     每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ID),和两个消息参数(wP ...

  2. android 结束if循环_Android 消息机制(Handler + MessageQueue + Looper)

    Author:CrazyWah Date:2018.03.26 CopyRight:http://crazywah.com 禁止搬运!!!禁止搬运!!!禁止搬运!!! Android的消息机制主要由H ...

  3. windows消息机制深入详解-1

    Windows 是一个事件驱动的操作系统.事件驱动围绕着消息的产生与处 理展开,事件驱动是靠消息循环机制来实现的.也可以理解为消息是一种报告有关事件发生 的通知,消息是Windows 操作系统的灵魂. ...

  4. Qt消息机制与window程序消息的对比分析

    理解Qt消息机制刻不容缓,那我们从对比传统的windows消息处理机制对比来说起: 只有知道QT底层的消息处理.对我们理解并学习Qt有很大帮助: 下面我将对windows程序与Qt对比,并在核心代码处 ...

  5. 安卓php推送消息机制,深入剖析Android消息机制原理

    在Android中,线程内部或者线程之间进行信息交互时经常会使用消息,这些基础的东西如果我们熟悉其内部的原理,将会使我们容易.更好地架构系统,避免一些低级的错误.在学习Android中消息机制之前,我 ...

  6. android消息,android消息机制

    在andorid中,系统的行为.用户的输入等事件都会被包装为一个消息, 进行消息发送.处理 关于消息的处理,就离不开Handler.Message.Loop 在平时使用时,Handler多用于多线程之 ...

  7. nacos 消息机制

    nacos 消息机制 目录 概 述 小结 参考资料和推荐阅读 LD is tigger forever,CG are not brothers forever, throw the pot and s ...

  8. MediaPlayer的消息机制分析

    一.引子: 先贴一段log: 08-18 21:57:20.110 11775 11812 V MediaPlayer: resetDrmState: mDrmInfo=null mDrmProvis ...

  9. Android消息机制学习笔记

    Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑: MessageQueue:消息队列,它的内存存储了一组消息,以队 ...

最新文章

  1. 数位dp ---- 暴力 + 二进制的数位dp 2020济南 L Bit Sequence
  2. 第六章 ppp协议实验
  3. H标签对网站SEO优化是不可或缺的!
  4. Flutter-现有iOS工程引入Flutter
  5. 《一天聊一个设计模式》备忘录
  6. java与python难度对比_Python和Java的区别,看完这篇文章你就清楚啦
  7. VLC音频重采样Audio resample核心流程梳理
  8. qt 进程打开excel_Python干货:多进程与多线程!
  9. 【Java学习】网络编程1
  10. 面试准备之SQL 3——数据管理
  11. jsp-解决自写Servlet老是报错404
  12. R_ggplot2基础(三)
  13. php mysql完整_BBS(php mysql)完整版(七)
  14. MySQL(8)-----truncate清空表和字段自增
  15. 已知两点坐标求水平距离_知道两个点的坐标X,Y,如何计算出两点间的距离以及角度,公式是什么...
  16. webp的js插件_网页及CSS使用JS脚本加载webP图片
  17. 【web前端】前端性能优化指南,还不来看看?
  18. html显示fps,Three.js - 使用stats.js库显示帧数(以及画面渲染时间)
  19. js延迟(异步)加载的6种方式 为什么要延迟加载js呢?
  20. 【Monkey测试】Monkey测试详解

热门文章

  1. 服务器卡logo显示2f,战争机器4卡LOGO界面解决办法
  2. 4月日本旅游签证简化办理攻略分享
  3. Authing 背后的计算哲学
  4. 做大数据工程师,需要学习什么?
  5. php session 自定义到数据库,PHP 自定义session储存 数据库 方式类   高洛峰 细说PHP...
  6. 从面试官的角度谈谈后端面试
  7. NYOJ 题目239 月老的难题 (二分图最大匹配-匈牙利算法模板)
  8. php strstr批量替换,也就这样,
  9. 现代经济感悟(4)-为什么一分钱一分货,两分货却要一块钱
  10. mysql 字段值分布很少的字段要不要加索引