📄 subject_36647.htm
字号:
<p>
序号:36647 发表者:super_xxx_xxx 发表日期:2003-04-17 13:51:41
<br>主题:关于回调函数的问题,高分!!!
<br>内容:我知道回调函数是通过函数指针实现的,但是这种调用方法和直接调用函数名有什么区别?我觉得不一定非的用函数指针,也可以直接调用函数。是不是因为系统所提供函数指针式的callback接口,如果自己写回调函数,是不是可以不用函数指针?请各为大虾明示。最好有一段可以运行起来的源代码,或者告诉我到什么地方down关于回调函数的源代码。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:刘杰 回复日期:2003-04-17 14:32:48
<br>内容:回调函数是回调函数的程序触发你的函数,直接调用是你来触发函数,比如一个状态检测,你总不能用个定时器不断检测状态,再调用相关函数吧.但如能被通知响应的话就最好了,就好比ActiveX中的事件与COM中的出接点。自已写当然不用回调函数就可以了。<BR>问题再说清楚一点吧
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:么眉的弟弟 回复日期:2003-04-17 14:44:53
<br>内容:我认为有了回调函数是的程序更灵活,你可以通过调用同一个函数,这个函数再调用多种回调函数,从而达到多种的处理。<BR><BR>例如,写一个排序函数供调用,其中包含比较大小。此时并不知要比较的数据是什么类型(整数、浮点数、字符串。。。)<BR>不用回调函数的画要为每类数据制作一个不同的排序函数。<BR>更通行的办法是在函数参数中列一个回调函数地址,并通知调用者:需要自己准备一个比较函数,其中包含两个指针类参数,函数要比较此二指针所指数据之大小,并由函数返回值说明比较结果。排序函数借此调用者提供的函数来比较大小,借指针传递参数,可以不管所比较的数据类型。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:super_xxx_xxx 回复日期:2003-04-17 14:57:32
<br>内容:在soket编程中用到了回调函数,但我始终的不太清楚。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:IceAge 回复日期:2003-04-17 20:40:51
<br>内容:这是早期绑订与晚期绑订的区别。直接调用是在编译时决定,回调函数在运行时决定调用什么函数。通过运行时绑订不同的函数, 实现不同的功能。例如:写 soket 的人不知道使用者的特别情况,只好留一个接口调用使用者的函数,这样既保持了通用性,也照顾到了特殊性。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:dr0 回复日期:2003-04-17 23:46:33
<br>内容:Just a function pointer
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:super_xxx_xxx 回复日期:2003-04-18 08:46:27
<br>内容:我的具体的问题:<BR>在UNIX环境下的socket编程,是如何使用回调函数的?<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-04-20 12:26:19
<br>内容:对callback这个概念,应该没有 UNIX/WINDOWS环境之分别<BR>通常callback的使用模式是如此:<BR><BR> <BR> void CallbackProvider(void)<BR> {<BR> // your implementation<BR> }<BR><BR> typedef void (*FUNC)(void);<BR><BR> FUNC CallbackTable[SOME_NUM];<BR><BR> void CallbackRegister(FUNC p)<BR> {<BR> CallbackTable[i] = p; // add the p to the callback pointer table<BR> }<BR> void CallbackConsumer(void)<BR> {<BR> if (the condition is met or the event occurs)<BR> call CallbackProvider // get the pointer from callback table and call it<BR> }<BR><BR> 上面是一种用法。 就是函数指针的用法。<BR><BR> 一般要<BR> 1, 注册callback , 以 call Register*** 函数,或者pass 一个函数指针给一个函数<BR> 2, 当某个事件发生时,系统会用这个pointer来call.<BR><BR> 就这样简单啊。本来简单的事情,套个概念,然后再套个概念,就复杂了。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-04-20 12:27:44
<br>内容:socket 编程里有callback嘛 ?我一时想不起来。<BR>你可以贴些例子上来.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:secretguest 回复日期:2003-04-20 14:37:41
<br>内容:所谓的回调函数(callback)指的是:有程序员自己编写的,但是被系统调用的函数,其函数的声明,参数的传递,等语法都有严格的规定,一个典型的例子:用vc的sdk编程时候的窗口过程就是一个典型的回调函数
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:ljb 回复日期:2003-04-20 17:00:42
<br>内容:dr0,我看的一本介绍OpenGl的书上用到了CALLBACK函数,但是没有你说的typedef void (*FUNC)(void);<BR><BR> FUNC CallbackTable[SOME_NUM];<BR><BR> void CallbackRegister(FUNC p)<BR> {<BR> CallbackTable[i] = p; // add the p to the callback pointer table<BR> }<BR>这些内容啊,只有CALLBACK函数定义,然后函数名作为一个参数被另一个函数调用,就完了。那你说的这些步骤是在哪里完成的?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-04-20 17:24:22
<br>内容:看来我说多了。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-04-20 17:46:47
<br>内容:这些内容啊,只有CALLBACK函数定义,然后函数名作为一个参数被另一个函数调用,就完了。那你说的这些步骤是在哪里完成的? <BR>// 你说的很对。其实就是个函数指针,把函数名传进去就完了。<BR>// 我说的是一个比较完整和复杂的例子。是个例子,不是callback的定义。<BR>// callback的精确定义我也不知道,计算机领域很难有精确的定义。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:ljb 回复日期:2003-04-20 21:31:41
<br>内容:不是啊,我是说函数体的实现,不用定义这个词。那些回调函数的注册等内容是在哪里实现的 ?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -