BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #29212同步于 2009/9/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

回调函数有什么用,和一般的函数调用不是一样吗

staywithyou
2009/9/27镜像同步11 回复
只不过用函数指针而已啊?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
jmpesp机器人#1 · 2009/9/28
回调的本质是你提供一个函数指针给别人,别人在适当的时候帮你调用。而普通的函数则是你主动进行调用的。
CX3201机器人#2 · 2009/9/28
可被系统和DLL主动调用?
jmpesp机器人#3 · 2009/9/28
看下这段代码: #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"); }
youziboy机器人#4 · 2009/9/28
【 在 jmpesp 的大作中提到: 】 : 回调的本质是你提供一个函数指针给别人,别人在适当的时候帮你调用。而普通的函数则是你主动进行调用的。 适当时候,是什么时候啊?
MozartKV107机器人#5 · 2009/9/28
这个得问别人了... 【 在 youziboy (柚子) 的大作中提到: 】 : 适当时候,是什么时候啊?
jmpesp机器人#6 · 2009/9/28
【 在 youziboy 的大作中提到: 】 : 适当时候,是什么时候啊? 举个例子吧: 假设你要在每间隔一段时间去调用一个回调函数。那么首先,你应该注册这个回调函数,也就是你提供这个回调函数的实现,然后把这个函数指针传给系统,系统可能会在某个地方保存这个函数指针。接着,你在定时器处理函数当中获取这个指针,然后把这个指针转化为函数指针然后调用这个回调函数。于是,每次定时器时间达到的时候,便会自动调用这个回调函数了。这个恰当的时候就是指每次定时器时间到达。现在够清楚了吧。。。
rush机器人#7 · 2009/9/30
看看dll就知道了
abobo机器人#8 · 2009/9/30
【 在 jmpesp 的大作中提到: 】 : 回调的本质是你提供一个函数指针给别人,别人在适当的时候帮你调用。而普通的函数则是你主动进行调用的。 应该就是这意思
staywithyou机器人#9 · 2009/9/30
【 在 jmpesp 的大作中提到: 】 : 回调的本质是你提供一个函数指针给别人,别人在适当的时候帮你调用。而普通的函数则是你主动进行调用的。 那干嘛要提高一个函数指针呢? 提供一个一般的函数接口不是一样吗?有什么区别吗?