记录自己写回调函数的一些问题
时间:2021-07-30
本文章向大家介绍记录自己写回调函数的一些问题,主要包括记录自己写回调函数的一些问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
代码:
1 #include "stdio.h" 2 #include <iostream> 3 #include <thread> 4 #include <vector> 5 6 //回调函数类 7 class MsgDeal 8 { 9 public: 10 MsgDeal() : value_(0){}; 11 void CallBack(std::string str, int num) 12 { 13 value_ = num; 14 std::cout << str << "'s value is " << value_ << std::endl; 15 } 16 17 int GetValue() 18 { 19 return value_; 20 } 21 22 private: 23 unsigned short value_; 24 }; 25 26 //线程掌控类 27 class ThreadControl 28 { 29 public: 30 ThreadControl() : stop_flag_(false){}; 31 32 template <class T> 33 void Register(T &deal) 34 { 35 threads_.push_back(std::thread(&ThreadControl::DataDeal<T>, this, std::ref(deal))); 36 } 37 38 void StopThread(){}; 39 40 private: 41 template <class T> 42 void DataDeal(T &deal) 43 { 44 unsigned short count = 0; 45 while (true) 46 { 47 deal.CallBack(typeid(deal).name(), ++count); 48 std::this_thread::sleep_for(std::chrono::seconds(1)); 49 } 50 } 51 52 bool stop_flag_; 53 std::vector<std::thread> threads_; 54 }; 55 56 template <class T> 57 void Test(T data) 58 { 59 data.CallBack(); 60 }; 61 62 int main() 63 { 64 MsgDeal msg_deal; 65 ThreadControl thread_control; 66 thread_control.Register(msg_deal); 67 68 std::this_thread::sleep_for(std::chrono::milliseconds(500)); 69 while (true) 70 { 71 std::cout << "get value : " << msg_deal.GetValue() << std::endl; 72 std::this_thread::sleep_for(std::chrono::seconds(1)); 73 } 74 thread_control.StopThread(); 75 76 std::cout 77 << "exit~~~~" << std::endl; 78 return 0; 79 }
编译环境:ubuntu20
编译指令:g++ main.c -lpthread
1、std::ref的使用。
std::ref只是包装器,此处给线程函数传值时必须使用std::ref包装。
如果在其他地方使用了std::ref,记得使用它的接口(get())调出被包装的数据。否则会报”对象无xx成员函数“
2、线程函数的参数如果不声明为引用的的话,传入的值将不会是引用。
原文地址:https://www.cnblogs.com/peimingzhang/p/15079215.html
- nginx通过https方式反向代理多实例tomcat
- Linux系统下yum镜像源环境部署记录
- 特斯拉vs凯迪拉克vs奔驰:三大汽车自动驾驶系统比拼
- Centos下添加静态路由(临时和永久有效)的操作记录
- python如何保证输入键入数字
- 微信小程序自定义数据分析试水
- 挂载银行前置机Ukey到windows server2012虚拟机的操作记录
- 文件上传速度查询方法
- “AS3.0高级动画编程”学习:第三章等角投影(上)
- su: 无法设置用户ID: 资源暂时不可用
- NumPY学习笔记
- LVS负载均衡下session共享的实现方式-持久化连接
- Centos6.9下RabbitMQ集群部署记录
- “AS3.0高级动画编程”学习:第三章等角投影(下)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Vue中watch的简单应用
- Go 使用标准库 net/rpc 包
- 强大的 Stream API(三)
- 微软发布代码智能新基准数据集CodeXGLUE,多角度衡量模型优劣
- 强大的 Stream API(二)
- 无限想象空间,用Python玩转3D人体姿态估计
- 300亿美元,AMD为什么要买Xilinx?
- Angular5.0.0新特性
- 用Python实现坦克大战游戏 | 干货贴
- android studio 3.0 升级 项目遇到的问题及更改思路(问题小结)
- Android Studio 3.0被调方法参数名提示的取消方法
- Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
- 解决python多线程报错:AttributeError: Can't pickle local object问题
- TensorFlow2.1.0最新版本安装详细教程
- Android仿京东首页秒杀倒计时