回调函数

1. 定义

我们先来看看回调的英文定义:

A callback is a function that is passed as an argument to another function and is executed after its parent function has completed。

  1. 字面上的理解,回调函数就是一个参数
  2. 将这个函数作为参数传到另一个函数里面
  3. 当那个函数执行完之后,再执行传进去的这个函数。
    这个过程就叫做回调。

2. 理解

其实也很好理解对吧,回调,回调,就是回头调用的意思
主函数的事先干完,回头再调用传进来的那个函数。

3. 举例子

举一个别人举过的例子:约会结束后你送你女朋友回家,离别时,你肯定会说:“到家了给我发条信息,我很担心你。” 对不,然后你女朋友回家以后还真给你发了条信息。小伙子,你有戏了。其实这就是一个回调的过程。你留了个参数函数(要求女朋友给你发条信息)给你女朋友,然后你女朋友回家,回家的动作是主函数。她必须先回到家以后,主函数执行完了,再执行传进去的函数,然后你就收到一条信息了。

参考

https://blog.youkuaiyun.com/angciyu/article/details/80794273

4. C++回调函数必须为静态函数的原因

c++类中线程函数为 static

4.1 原因: 函数参数类型匹配

原来非静态成员函数都会在参数列表中加上一个this指针为为参数, 这样的话你写的线程函数就不符合调用规定了.
比如 DWORD WINAPI ThreadFun(LPVOID); 是非静态的,实际编译后,就会变成
DWORD WINAPI ThreadFun(LPVOID, CMyClass *this);
这个函数就明显不能作为线程的函数了, 因为多了个参数.所以编译就过不了了.
因为线程函数 ThreadCreate 调用 CreateThread 第四个参数 lpParameter 是传给线程函数的参数。
加上static修饰后,类的成员函数就不会被加上默认的this参数,所以就符合调用规定了

4.2 例子

线程函数:
static Thread_result_t VA_THREAD_CALL thread_xxxWorking(void *arg);

回调函数:
static xxxCallBackWakeup(void *pUserParam, const ivChar param); / xxxx回调函数 */

ret = m_hxxxInst->xxxRegisterCallBacks(“func_wake_up”, xxxCallBackWakeup, this);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值