一,什么是回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
二,为什么使用回调函数
回调可用于通知机制,例如在我们的项目中,播放器在后台运行,前台通过控制条上暂停,播放,拖拽等行为对播放器进行操作。但是当你进行这些动作的时候,后台的播放器在相当于一个暗盒里运行,你并不知道操作成功了,还是由于某个原因失败了。这个时候你就要使用回调函数,来通知前台的操作是否成功。觉个更简单的例子,你女朋友要出远门,你给你女朋友一个电话,让她每过了一个地方给你回个电话,在这个过程中,你女朋友通过电话告诉你她位置的变化这个过程就是回调函数。
3。简单的回调函数的实现
#include <stdio.h>
typedef void (*rand_num)(void* ,int);
void GetCallBack(void* lpVoid,rand_num callback)
{
int a = 1;
callback(lpVoid,a); //step 3 在这里给Int参数传值
}
class B
{
public:
B(){};
void myprintf(int a);
void test(void);
static void fCallBack(void* lpVoid,int a);//把回调函数设为类的静态成员函数。
};
void B::fCallBack(void *lpVoid, int a)
{
B* p = (B*)lpVoid; //该回调函数的其中一个参数是该类的对象指针
p->myprintf(a);
}
void B::myprintf(int a)
{
switch(a)
{
case 0 :
printf("nnnnnn....\n");
break;
case 1:
printf("i get it ....value is %d\n",a);
break;
default:
break;
}
}
void B::test()
{
GetCallBack(this,fCallBack);//step 2
}
int main(void)
{
B b;
b.test(); //step 1
}
|
阅读(7282) | 评论(0) | 转发(0) |