您的位置:首页 > 其它

回调函数总结(个人见解)

2013-06-08 20:05 246 查看
回调函数总结(个人见解):

1.    回调函数的实现    ==>    被调用者写

2.    写库的人    ==> 调用回调函数的人 ==> 调用者

2.1    调用者:

        1) 不关心谁是被调用者

        2) 只关心回调函数的原型及返回值

        3) 声明回调函数的接口,回调函数的实现交给被调用者去处理

2.2    被调用者

        1) 根据调用者声明的回调函数接口原型进行实现

        2) 实现规则由被调用者控制

        3) 被调用者可以修改实现规则

3.    若回调函数接口(返回值或参数列表)发生变化,则其实现或调用者都可能要修改代码!

如有不同意见,欢迎探讨!

软件模块之间总存在一定的接口,调用方式可分为三类: 同步调用,回调,异步调用

1. 同步调用最简单

2. 回调是异步调用的基础

许多编译器有几种调用规范。

如在Visual C++中,可以在函数类型前加_cdecl,_stdcall或者_pascal来表示其调用规范(默认为_cdecl)。

C++ Builder也支持_fastcall调用规范。

调用规范影响编译器产生的给定函数名,参数传递的顺序(从右到左或从左到右),堆栈清理责任(调用者或者被调用者)以及参数传递机制(堆栈,CPU寄存器等)。

将调用规范看成是函数类型的一部分是很重要的;不能用不兼容的调用规范将地址赋值给函数指针。

回调函数就好像是一个中断处理函数,系统在符合你设定的条件时自动调用。为此,你需要做三件事:

1. 声明;statci int __stdcall MyAdd(int x, int y)

2. 定义;int MyAdd(intx, int y){(实现)}

3. 设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于系统调用。

声明和定义时应注意:回调函数可以作为类的成员函数,但必须声明为静态方法。

--------------

在其它类、模块使用时要先导出那个回调类型

如:typedef BOOL(CS_NVR_CALLBACK* CS_NVR_fpVMapReport)(LPMON_ITEM pStuMonItem, LPCAM_ITEM pStuCamItem, long lParam);

其中CS_NVR_fpVMapReport就是回调函数的类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: