C++ 回调函数 Callback 机制例程
- #include <iostream>
- #include <thread>
- #include <mutex>
- #include <Windows.h>
- // callback test
- /////////////////////////////////////////////////////////////
- // API part
- typedef void(__stdcall *CallbackEvent)(const char* pStr, bool bOK, void * any);
- /////////////////////////////////////////////////////////////
- // API part
- class API
- {
- public:
- API() = delete;
- API(CallbackEvent pCallBack, const char* pStr, bool bOK, void * any=nullptr)
- :
- mpStr (pStr ) ,
- mbOK (bOK ) ,
- mpCallBack(pCallBack) ,
- mAny (any)
- {
- mThread = std::make_unique<std::thread>(&API::run, this);
- mThread->detach();
- }
- ~API(){};
- void run()
- {
- int i = 0;
- while (true)
- {
- Sleep(50);
- if (i % 10 == 0)
- {
- // start callback event
- //auto str = std::to_string(i);
- mpCallBack(mpStr, mbOK, mAny);
- }
- std::cout << "i = " << i << std::endl;
- ++i;
- if (i == 200)
- {
- break;
- }
- }
- }
- private:
- std::unique_ptr<std::thread> mThread ;
- CallbackEvent mpCallBack;
- // parameter of callback function.
- const char* mpStr ;
- bool mbOK ;
- void * mAny ;
- };
- /////////////////////////////////////////////////////////////
- typedef struct passToCallbackFun
- {
- passToCallbackFun(int w, int h)
- :
- width (w),
- height(h)
- {}
- int width ;
- int height;
- } ImgSize;
- // user definition
- void __stdcall onCallback(const char* pStr, bool ok, void * any)
- {
- std::cout << "doing: " << pStr << ", ok = " << ok << std::endl;
- if (any == nullptr) return;
- ImgSize* iSize = (ImgSize*)any;
- std::cout << "size: w=" << iSize->width << ", h= " << iSize->height << std::endl;
- }
- /////////////////////////////////////////////////////////////
- int main()
- {
- // register callback event
- std::string str("adc");
- ImgSize isize(10, 20);
- API api(onCallback, str.c_str(), true, &isize);
- // hold main thread
- int i = 0;
- while (true)
- {
- Sleep(50);
- if (i % 10 == 0)
- {
- // do something
- }
- //std::cout << "i = " << i << std::endl;
- ++i;
- if (i == 200)
- {
- break;
- }
- }
- return 0;
- }
C++ 回调函数 Callback 机制例程的更多相关文章
- java基础-回调函数(callback)
java基础-回调函数(callback) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数 ...
- JavaScript系列之回调函数callback
JavaScript系列之回调函数callback JavaScript回调函数的使用是很常见的,引用官方回调函数的定义: A callback is a function that is passe ...
- js回调函数(callback)理解
Mark! js学习 不喜欢js,但是喜欢jquery,不解释. 自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函 ...
- JS回调函数(callback)
在使用Jquery的时候,用到Callback(),回调函数的概念.而且很多. 比如: $.ajax({ url:"test.json", type: "GET" ...
- 理解javascript中的回调函数(callback)
以下内容来源于:http://www.jb51.net/article/54641.htm 最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs ...
- 解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)
由于工作当中需要用的flask_socketio,所以自己学习了一下如何使用,查阅了有关文档,当看到回调函数callback的时候,发现文档里都描述的不太清楚,最后终于琢磨出来了,分享给有需要的朋友 ...
- 理解javascript中的回调函数(callback)【转】
在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...
- C++回调函数(callback)的使用
什么是回调函数(callback) 模块A有一个函数foo,他向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什么事 ...
- 回调函数callback使用例子
代码如下: <!DOCTYPE HTML> <html> <head> <meta charset="GBK" /> <tit ...
随机推荐
- go语言设计模式之interpreter
interpreter.go package interpreter import ( //"fmt" "strconv" "strings" ...
- css 知识点,你有可能不知道欧!
1.[定位特性] 绝对定位和固定定位,同时设置left和right等同于隐式的设置宽度. <style> span{ position:fixed; left:30px; right:30 ...
- xml模块(了解)
目录 一.xml简介 二.Python使用xml 三.自己创建xml文档 一.xml简介 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在 ...
- IT兄弟连 Java语法教程 数组 数组的初始化
Java语言中数组必须先初始化,然后才可以使用.所谓初始化,就是为数组的数组元素分配内存空间,并为每个数组元素赋初始值. 这时有人会问,能不能只分配内存空间,不赋初始值呢?答案是肯定不行的,一旦为数组 ...
- 序列化禁止使用Optional
1: 概论 Optional 是Java8用来改变java引发NPE的解决办法,但是不是绝对的解决办法 2: 例子: 很多博文一上来就给力以下使用例子 @Data public class User ...
- jemalloc内存占用问题
最近,有部分越南的服务器内存不断上涨,怀疑是内存泄漏,因为框架提供的内存报告里,C内存和Lua占用内存都不大,和ps里看的差好多.总内存在12G左右,C和Lua的加起来约4G,两者相差了8G 经过一番 ...
- 为了“小命”,这款APP一定要下!火爆了!
前言中国地震台网在 6 月 17 日测定:6 月 17 日 22 时 55 分,四川省宜宾市长宁县发生 6 级地震,震源深度 16 千米.成都高新减灾研究所通过电台广播.手机短信.电视等途径,提前 6 ...
- 黄聪:Mysql开启InnoDB引擎出现1067错误的解决办法
在my.ini文件添加下面这行: innodb_force_recovery = 1 可以解决:InnoDB: Attempted to open a previously opened tables ...
- 计科菜鸟玩生信(一)——Windows10下用docker安装GATK
1.官网下载GATK. (学校网速实在是太慢了,下载几个小时到自闭) 下载地址:https://software.broadinstitute.org/gatk/download/ 下载完成后文件夹中 ...
- 最好用的koa2+mysql的RESTful API脚手架,mvc架构,支持node调试,pm2部署。
#基于webpack构建的 Koa2 restful API 服务器脚手架 这是一个基于 Koa2 的轻量级 RESTful API Server 脚手架,支持 ES6, 支持使用TypeSc ...