回掉函数
int A(char *p); // 回调函数
typedef int(*CallBack)(char *p) ; // 声明CallBack 类型的函数指针
CallBack myCallBack ; // 声明函数指针变量
myCallBack = A; // 得到了函数A的地址
// -------------- 使用例子 -------------
char *p = "hello!";
CallBack myCallBack ;
myCallBack = A ;
B(A, p);
////////////////////////////////////
既然B(A, p);只用到A,为什么还要
typedef int(*CallBack)(char *p) ; // 声明CallBack 类型的函数指针
CallBack myCallBack ; // 声明函数指针变量
myCallBack = A; // 得到了函数A的地址
程序都没用到??????????????
问题点数:20、回复次数:14Top
1 楼piaochen_2002(执子之手,与子偕老!)回复于 2006-03-01 14:47:14 得分 0
好象是没有什么用!Top
2 楼jinke1983(45616546)回复于 2006-03-01 14:49:56 得分 0
我觉得应该是B(myCallBack,p);比较好Top
3 楼jinke1983(45616546)回复于 2006-03-01 15:13:32 得分 0
继续求助Top
4 楼jinke1983(45616546)回复于 2006-03-01 15:16:50 得分 0
是不是
B(A, p);
B(myCallBack,p);
一样的啊?Top
5 楼zenny_chen(ACE Intercessor)回复于 2006-03-01 21:25:37 得分 0
回调函数一般是由系统提供的。比如一个定时中断处理函数。
由于用户无法去捕捉定时中断,因此无法直接去处理定时中断。
这时可以利用回调机制:
int SetTimer(unsigned int (*userEntry)(void* pParam), void *pParam, unsigned long suspendTime)
{
// 系统处理部分(对定时器进行初始化)
_set_time_init_count(suspendTime); // 设置初始定时值
unsigned int hTimer = (*userEntry)(pParam);
// 做其他事
return hTimer;
}
unsigned int TimerISR(void *pParam)
{
printf("An timer interrupt occurred!\n");
return 1;
}
void main()
{
SetTimer(&TimerISR, NULL, 500); // 定时500毫秒
while(1);
}
SetTimer函数将会把用户定义的TimerISR注册在中断向量中,并且将携带的参数pParam存入TimerISR在系统态时可访问的地方。这样当500毫秒过后,用户定义的TimerISR将被启动。Top
6 楼lei001(太极)回复于 2006-03-02 00:42:35 得分 0
用户也是可以定义回调函数的,lz举的就是一个例子
char *p = "hello!";
CallBack myCallBack ;
myCallBack = A ;
B(A, p);
B从什么地方来?看不懂的,能否举的例子详细点,另外根据你的例子,稍做一点修改:
#include<iostream>
using namespace std;
void A(char *p); // 回调函数
typedef void(*CallBack)(char *p) ; // 声明CallBack 类型的函数指针
void A(char *p)
{
cout<<p;
}
void main()
{
// -------------- 使用例子 -------------
char *p = "hello!";
CallBack myCallBack ;
//myCallBack(p);//出错的
myCallBack = A ;
A(p);
myCallBack(p);//同A(p);
}
Top
7 楼window09()回复于 2006-03-02 01:35:00 得分 0
从LZ给的代码看,那样写确实没什么用
注意:CallBack CALLBACK 之间不同Top
8 楼yameng(雅梦)回复于 2006-03-02 09:03:39 得分 0
是可以不用啊,这样写我觉得主要是为了看代码时方便吧。不过我没看出来你的代码中用的是回调函数,从你定义的函数指针来看,A函数并不是一个回调函数啊
另外CALLBACK只是一个调用方式声明,不一定非得由系统调用,自已的程序完全可以调用。Top
9 楼jinke1983(45616546)回复于 2006-03-02 09:13:11 得分 0
B是调用者!
疑问:
1:SetTimer(&TimerISR, NULL, 500); // 定时500毫秒
TimerISR本身就是地址啊,为什么还要加&?
2:
A(p);
myCallBack(p);//同A(p);
这个我知道,我想知道
B(A, p);
B(myCallBack,p);
是不是一样?Top
10 楼jinke1983(45616546)回复于 2006-03-02 09:32:12 得分 0
顶Top
11 楼Wolf0403(废人:独活十年~心如刀割)回复于 2006-03-02 09:33:03 得分 0
写范例程序的人忘记了。。。Top
12 楼jinke1983(45616546)回复于 2006-03-02 10:29:35 得分 0
写范例程序的人忘记了。。。???????????????????????????????????????????Top
13 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-02 10:36:10 得分 0
是有点莫名其妙啊,
这是谁的代码?
说不定写代码的人神游去了呢Top
14 楼lei001(太极)回复于 2006-03-02 22:45:56 得分 0
我想应该是一样的
Top




