如何编写回调函数

        回调函数在日常工作中是比较常用的,但是在校的学生很多接触不到这个被老师“忽略”的技术小点。所以,写点文字,给那些需要的学弟学妹们。
     
        回调函数顾名思义就是开设一个函数让别的应用程序来调用。假设我们现在有这样的一个需求:我们开设了一个线程作为工作线程在该线程内转换100个文件,需要在主线程内显示转换进度。通常我们可以PostMessage给住线程,但是某些情况下,会导致程序crash或者进度显示明显滞后。
        我们还有一种方法,就是开设回调,让工作线程主动的调用我们的回调实现进度的刷新:
        第一步:
        函数原型声明
typedef BOOL ( CALLBACK* SAVEPROC)(INT32 nSavePercent, LPARAM lParam); 
 
        第二步:
        主线程内编写回调函数
              BOOL CALLBACK TranscodingProcess(INT32 nPercent, LPARAM lParam)
{
    return TRUE;
}
        第三步:
        工作线程内使用回调函数
HRESULT GenerateTraceBMP(SAVEPROC lpProc)
{
    if (lpProc)
    {
           lpProc(10, 0);
}
    return NOERROR;
}
 
        代码比较简单,如果还是不会使用的朋友,可以发送mail给我: bicarse@yahoo.com.cn,会转发一份代码给你。
回调函数简单讲就是一个函数指针,编写一个函数,然后把函数地址传递给这个函数指针即可。以下是不同场景下使用C++编写回调函数的方法示例: ### 简单的回调函数设置 在C++中设置回调函数,可定义一个函数用于设置回调函数指针,并在该函数中调用回调函数。示例代码如下: ```cpp #include <stdio.h> // 定义回调函数指针类型 typedef void(*DebugCallBack)(const char *p); // 全局回调函数指针 DebugCallBack CallBackFunction_p; // C++的回调函数 void Set_DebugCallBackFunction(void(*func)(const char *p)) { // 设置回调函数指针 CallBackFunction_p = func; printf("回调函数设置成功.\n"); CallBackFunction_p("这是回调函数传出来的测试数据.\n"); } ``` 在上述代码中,`Set_DebugCallBackFunction` 函数接受一个函数指针作为参数,将其赋值给全局的回调函数指针 `CallBackFunction_p`,并调用该回调函数传入测试数据 [^1]。 ### DLL 中使用回调函数 在 DLL 应用程序中使用回调函数,可定义多个普通函数和一个接受回调函数指针的函数。示例代码如下: ```cpp #include <iostream> // 定义加法函数 int Add(int plus1, int plus2) { int add_result = plus1 + plus2; return add_result; } // 定义乘法函数 int mulp(int plus1, int plus2) { int add_result = plus1 * plus2; return add_result; } // 接受回调函数指针的函数 int CallPFun(int(*callback)(int, int), int a, int b) { return callback(a, b); } ``` 在上述代码中,`CallPFun` 函数接受一个回调函数指针 `callback` 以及两个整数参数 `a` 和 `b`,并调用该回调函数进行计算 [^4]。 ### 使用 ctypes 方式实现 C++ 和 Python 相互调用回调函数 在 C++ 和 Python 相互调用回调函数时,可使用 ctypes 方式。回调函数 `RtspMppCallBack` 通过 `CFUNCTION` 定义,回调函数可传递普通参数,如 `c_int`、`c_char_p`,C++ 还可传递自定义结构 `tagFrameInfo` 给 Python,Python 传递类指针给 C++,然后 C++ 传回类指针并调用类成员函数 `DoOnProcCallBack` [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值