我对回调函数的概念很模糊。回调函数在定义时只不过采用了CALLBACK(即__stdcall)的调用方式,其他并没有特殊之处。普通函数不是也可以采取--stdcall这种调用方式么。回调函数的概念和C++书籍中讲到的函数指针作为另一个函数的参数的概念是不是一回事?如果是的话,那不是任何函数都可以是回调函数了,普通函数和回调函数没有了任何区别?如果把回调函数A的指针传给另一个函数B,那么是不是当执行函数B时才调用回调函数A,而出了B的范围就不会调用A了?回调函数A是谁调用的,是函数B还是操作系统?我们可以自己调用回调函数吗?如果回调函数是被操作系统随时调用的,那么如果在控制台程序中使用了回调函数,则程序流向就是不可知的,因为程序流向可能随时被中断转而去执行回调函数,是这样吗?
解决方案 »
- 求教一个关于MFC多线程的问题
- dialog 用StretchBlt加载 了1.BMP图片,想刷新显示加载的2.bmp,此时1.bmp可以见。
- 棘手问题,高手请教
- 随便问一下:现在搞 3D 开发基本用什么?
- 怎样判断鼠标点击在一个不规则的区域
- 有两个连接,一个GPRS,一个CDMA,怎么控制FTP从其中一个连接传输数据?
- help!
- 大家一般怎样统计代码行数标准是怎样的
- Windows 核心编程 这里是不是讲的有问题呀?至少是不严谨
- vc操作 excel如何指定活动表单?
- 怎样用SendMessage发送WM_MOVE消息,不知道怎样把CPoint数据转为LPARME?
- 关于于内存泄漏的问题:在什么情况下会发生内存泄漏,(CButton*)getdlgitem()会吗?
普通情况下,都是你调库函数,库函数是在你的程序出成前就生成.如果库函数要调你的函数,看上去是不可能的,因为你的程序在库函数被编译时还没有出生呢. 但库函数可以通过接受一个函数指针的方针,先假定你会提供这个函数,来实现它的处理.这样的情况下,你后来写的那个函数就是回调函数.
一个接口,你利用这个接口来做你的事。比如,假设系统实现了一个功能:
[按下鼠标左键,弹出一个对话框,显示一个名字]
它用到一个叫GetName的函数,返回一个名字,但自己不写这个函数。
你就可以自己编一个GetName函数。
按下鼠标左键,系统先做一些事,执行到GetName,进入你的函数执行,
函数执行完后,系统再做另一些事,最后达到功能要求。
这个时候,显示的名字,就是你在GetName中得到的。