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 ...
随机推荐
- 201871010118-唐敬博《面向对象程序设计(java)》第一周学习总结
博文正文开头格式:(3分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/p/11435127.html 这个作业的要求在哪里 https:/ ...
- 201871020225-牟星源 《面向对象程序设计(java)》第一周学习总结
正文 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daiz ...
- Rust v1.39发布 - 这个编程语言真不一般!
https://zhuanlan.zhihu.com/p/90612241 今天(2019-11-07)Rust终于发布了期待已久的v1.39版本,增加了重量级的async/await关键字支持.Ru ...
- navicat连接mysql报错1251解决方案,从头搭建node + mysql 8.0 (本人亲测有效)
准备学node 好久了 一直没有动手去写,今天突发奇想,然后就安装了一个mysql (找了一个博客跟着步骤去安装的),然后打算用node 写个增删改查. 1.下载mysql安装包 地址: http ...
- Mybatis智能标签
一.ProviderDao层 //智能标签案例 //智能标签多条件查询 public List<Provider> providerTest(@Param("proCode&qu ...
- 【STM32H7教程】第21章 STM32H7的NVIC中断分组和配置(重要)
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第21章 STM32H7的NVIC中断分组和配置( ...
- centos6和centos7的防火墙基本命令
一.centos6: 1.firewall的基本启动/停止/重启命令 $查看防火墙状态: service iptables status (/etc/init.d/iptables status) $ ...
- HTML5之图片转base64编码
之前在群里看到很多小哥哥小姐姐讨论关于图片base64互转的方法,刚好我之前用到的一个方法给大家分享一下. <!Doctype html><html> <head> ...
- window10下pytorch和torchvision CPU版本安装
1.环境 python3.5 Anaconda 4.2.0 2.pytorch安装 pip3 install https://download.pytorch.org/whl/cpu/torch-1. ...
- My97Datepicker 日历控件的使用
如果显示中乱码可以再改变lang js包 中的 以防乱码 var $lang = {errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\ ...