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

网站代码制作软件江苏省建设厅网站查询施工员证

网站代码制作软件,江苏省建设厅网站查询施工员证,沈阳免费建网站,安徽网新科技网站建设介绍回调函数的实现 在消息队列和网络库的框架中,当接收到消息(报文)时,回调用户自定义的函数对象,把消息(报文)参数传给它,由它决定如何处理。 queue参考文章:C queue(STL queue&…

回调函数的实现

在消息队列和网络库的框架中,当接收到消息(报文)时,回调用户自定义的函数对象,把消息(报文)参数传给它,由它决定如何处理。

queue参考文章:C++ queue(STL queue,队列)用法详解_queue c++ 用法-CSDN博客

代码示例:

#include <iostream>#include <string>#include <thread>                      // 线程类头文件。#include <mutex>                      // 互斥锁类的头文件。#include <deque>                      // deque容器的头文件。#include <queue>                      // queue容器的头文件。#include <condition_variable>  // 条件变量的头文件。#include <functional>using namespace std;void show(const string& message) {  // 处理业务的普通函数cout << "处理数据:" << message << endl;}struct BB {  // 处理业务的类void show(const string& message) {cout << "处理表白数据:" << message << endl;}};class AA{mutex m_mutex;                                    // 互斥锁。condition_variable m_cond;                  // 条件变量。queue<string, deque<string>> m_q;   // 缓存队列,底层容器用deque。function<void(const string&)> m_callback;  // 回调函数对象。public:// 注册回调函数,回调函数只有一个参数(消费者接收到的数据)。template<typename Fn, typename ...Args>void callback(Fn && fn, Args&&...args) {m_callback = bind(forward<Fn>(fn), forward<Args>(args)..., std::placeholders::_1);  // 绑定回调函数。}void incache(int num)     // 生产数据,num指定数据的个数。{lock_guard<mutex> lock(m_mutex);   // 申请加锁。for (int ii = 0; ii < num; ii++){static int bh = 1;           // 编号。string message = to_string(bh++) + "号";    // 拼接出一个数据。m_q.push(message);     // 把生产出来的数据入队。}//m_cond.notify_one();     // 唤醒一个被当前条件变量阻塞的线程。m_cond.notify_all();          // 唤醒全部被当前条件变量阻塞的线程。}void outcache() {    // 消费者线程任务函数。while (true) {// 把互斥锁转换成unique_lock<mutex>,并申请加锁。unique_lock<mutex> lock(m_mutex);// 1)把互斥锁解开;2)阻塞,等待被唤醒;3)给互斥锁加锁。m_cond.wait(lock, [this] { return !m_q.empty(); });// 数据元素出队。string message = m_q.front();  m_q.pop();cout << "线程:" << this_thread::get_id() << "," << message << endl;lock.unlock();      // 手工解锁。// 处理出队的数据(把数据消费掉)。if (m_callback) m_callback(message);  // 回调函数,把收到的数据传给它。}}};int main(){AA aa;// aa.callback(show);                   // 把普通函数show()注册为回调函数。BB bb;aa.callback(&BB::show, &bb);    // 把类成员函数BB::show()注册为回调函数。thread t1(&AA::outcache, &aa);     // 创建消费者线程t1。thread t2(&AA::outcache, &aa);     // 创建消费者线程t2。thread t3(&AA::outcache, &aa);     // 创建消费者线程t3。this_thread::sleep_for(chrono::seconds(2));    // 休眠2秒。aa.incache(2);      // 生产2个数据。this_thread::sleep_for(chrono::seconds(3));    // 休眠3秒。aa.incache(5);      // 生产5个数据。t1.join();   // 回收子线程的资源。t2.join();t3.join();}

注:此课件及源代码来自B站up主:码农论坛,该文章仅作为本人学习笔记及交流学习使用。   

http://www.yayakq.cn/news/710721/

相关文章:

  • 提升政务网站建设水平重庆网络推广公司
  • 请人用wordpress建站假期做那种网站受欢迎
  • 漳州哪里做网站个人在线网站推广
  • 高端网站建设汉狮团队苏州专业做网站比较好的公司
  • 橙色企业网站源码网站建设 环保素材
  • 关于我们网站设计网店开店流程
  • 有什么设计网站推荐网站版块模板
  • 如何建设一个电商网站自助建站系统破解版
  • 怎么做网站交易健身网站开发开题报告
  • 做网站需要注意的事项建设网站转赚钱吗
  • 齐全的网站建设电子商务网站面临的安全隐患有哪些
  • 湖南做网站公司有哪些简单5步_制作wordpress留言板
  • 旅行社服务网点能否做网站机关门户网站 建设 方案
  • 重庆建站管理系统开发在线A视频做爰网站
  • 免费网站站建筑工程劳务信息平台
  • 郑州网站建设的软件广告免费设计在线生成
  • 建设网站的本质家具设计图纸三视图
  • 郯城建设局网站wordpress小程序调用数据库字段
  • 如何建设平台型的网站google浏览器官网
  • 高端商品网站中小学网站建设排行2017
  • 潍坊高新建设局网站wordpress主题接入社交功能
  • 设计素材网站飘网站建设收费标准报价
  • 西安网站开发技术下载好了网站模板怎么开始做网站?
  • 网站开发工程师应聘书范文700字任县网站建设公司
  • 温州网站建设排名网易云wordpress
  • 受欢迎自适应网站建设地址泰安市住房建设局网站
  • 网站设计说明书范文海珠营销型网站制作
  • 给我推荐一个网站济南mip网站建设
  • 购物网站建设图标大全wordpress插件包
  • 建设牌安全带厂家网站海南省建设执业中心网站