您的位置:首页 > 运维架构 > Linux

linux回调函数

2015-08-04 18:49 441 查看
转自 : http://blog.chinaunix.net/uid-24372973-id-293644.html

一,什么是回调函数

    
 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

二,为什么使用回调函数 

     回调可用于通知机制,例如在我们的项目中,播放器在后台运行,前台通过控制条上暂停,播放,拖拽等行为对播放器进行操作。但是当你进行这些动作的时候,后台的播放器在相当于一个暗盒里运行,你并不知道操作成功了,还是由于某个原因失败了。这个时候你就要使用回调函数,来通知前台的操作是否成功。觉个更简单的例子,你女朋友要出远门,你给你女朋友一个电话,让她每过了一个地方给你回个电话,在这个过程中,你女朋友通过电话告诉你她位置的变化这个过程就是回调函数。

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

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: