#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 机制例程的更多相关文章

  1. java基础-回调函数(callback)

    java基础-回调函数(callback) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数 ...

  2. JavaScript系列之回调函数callback

    JavaScript系列之回调函数callback JavaScript回调函数的使用是很常见的,引用官方回调函数的定义: A callback is a function that is passe ...

  3. js回调函数(callback)理解

    Mark! js学习 不喜欢js,但是喜欢jquery,不解释. 自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函 ...

  4. JS回调函数(callback)

    在使用Jquery的时候,用到Callback(),回调函数的概念.而且很多. 比如: $.ajax({ url:"test.json", type: "GET" ...

  5. 理解javascript中的回调函数(callback)

    以下内容来源于:http://www.jb51.net/article/54641.htm 最近在看 express,满眼看去,到处是以函数作为参数的回调函数的使用.如果这个概念理解不了,nodejs ...

  6. 解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)

    由于工作当中需要用的flask_socketio,所以自己学习了一下如何使用,查阅了有关文档,当看到回调函数callback的时候,发现文档里都描述的不太清楚,最后终于琢磨出来了,分享给有需要的朋友 ...

  7. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

  8. C++回调函数(callback)的使用

    什么是回调函数(callback)    模块A有一个函数foo,他向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什么事 ...

  9. 回调函数callback使用例子

    代码如下: <!DOCTYPE HTML> <html> <head> <meta charset="GBK" /> <tit ...

随机推荐

  1. idea安装以及使用

    1. 简介1.1 IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构. J2EE ...

  2. openjdk源码下载

    http://hg.openjdk.java.net/jdk8u/jdk8u60/jdk/file/935758609767 browse>zip

  3. day(66)作业

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 【51nod1253】Kundu and Tree(容斥+并查集)

    点此看题面 大致题意: 给你一棵树,每条边为黑色或红色, 求有多少个三元组\((x,y,z)\),使得路径\((x,y),(x,z),(y,z)\)上都存在至少一条红色边. 容斥 我们可以借助容斥思想 ...

  5. [ Python入门教程 ] Python生成随机数模块(random)使用方法

    1.使用randint(a,b)生成指定范围内的随机整数.randint(a,b)表示从序列range([a,b])中获取一个随机数,包括b. >>> random.randint( ...

  6. shutil模块(了解)

    目录 一.shutil模块 1.1 zipfile压缩解压缩 1.2 tarfile压缩解压缩 一.shutil模块 高级的文件.文件夹.压缩包处理模块. import shutil # shutil ...

  7. 想成为Python高手,必须看这篇爬虫原理介绍!(附29个爬虫项目)

    互联网是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML.JS.CSS代码返回给浏览器,这些代码经过浏览器解析.渲染,将丰富多彩的网页呈现我们眼前. 一.爬虫是什么? 如果我们 ...

  8. 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 3

    23.2  接口实现的基础 大家都很了解函数在本地应用,通过名称调用函数执行,并通过传递不同参数,函数有不同执行,执行后给调用者返回结果.如果把一个函数做成一个接口远程访问,也需要这几个步骤.使用HT ...

  9. linux系列之常用运维命令整理笔录

    目录 本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍 ...

  10. Linux shell脚本编程及系统启动实践

    1.编写脚本,接受二个位置参数,magedu和/www,判断系统是否有magedu,如果没有则自动创建magedu用户,并自动设置家目录为/www [root@test qiuhom]#cat che ...