返回信息流只不过用函数指针而已啊?
这是一条镜像帖。来源:北邮人论坛 / cpp / #29212同步于 2009/9/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
回调函数有什么用,和一般的函数调用不是一样吗
staywithyou
2009/9/27镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
看下这段代码:
#include <stdio.h>
#define CALLBACK __stdcall
typedef void (CALLBACK *FnVoidPtr)(void);
typedef void (CALLBACK *FnIntPtr)(int);
void CALLBACK FnInt(int);
void CALLBACK FnVoid(void);
void CallCallBack(int);
static long callback[2] = {(long)FnVoid, (long)FnInt};
int main()
{
CallCallBack(0);
CallCallBack(1);
return 0;
}
void CallCallBack(int type)
{
if (0 == type)
((FnVoidPtr)(callback[0]))();
else
((FnIntPtr)(callback[1]))(1);
}
void CALLBACK FnVoid()
{
printf("void fn called\n");
}
void CALLBACK FnInt(int)
{
printf("int fn called\n");
}
【 在 jmpesp 的大作中提到: 】
: 回调的本质是你提供一个函数指针给别人,别人在适当的时候帮你调用。而普通的函数则是你主动进行调用的。
适当时候,是什么时候啊?
【 在 youziboy 的大作中提到: 】
: 适当时候,是什么时候啊?
举个例子吧:
假设你要在每间隔一段时间去调用一个回调函数。那么首先,你应该注册这个回调函数,也就是你提供这个回调函数的实现,然后把这个函数指针传给系统,系统可能会在某个地方保存这个函数指针。接着,你在定时器处理函数当中获取这个指针,然后把这个指针转化为函数指针然后调用这个回调函数。于是,每次定时器时间达到的时候,便会自动调用这个回调函数了。这个恰当的时候就是指每次定时器时间到达。现在够清楚了吧。。。
【 在 jmpesp 的大作中提到: 】
: 回调的本质是你提供一个函数指针给别人,别人在适当的时候帮你调用。而普通的函数则是你主动进行调用的。
应该就是这意思
【 在 jmpesp 的大作中提到: 】
: 回调的本质是你提供一个函数指针给别人,别人在适当的时候帮你调用。而普通的函数则是你主动进行调用的。
那干嘛要提高一个函数指针呢?
提供一个一般的函数接口不是一样吗?有什么区别吗?