Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176107
  • 博文数量: 24
  • 博客积分: 1116
  • 博客等级: 少尉
  • 技术积分: 342
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-20 19:15
文章分类

全部博文(24)

文章存档

2011年(20)

2010年(4)

我的朋友

分类: C/C++

2011-03-18 18:30:38

一,什么是回调函数
      回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
二,为什么使用回调函数 
     回调可用于通知机制,例如在我们的项目中,播放器在后台运行,前台通过控制条上暂停,播放,拖拽等行为对播放器进行操作。但是当你进行这些动作的时候,后台的播放器在相当于一个暗盒里运行,你并不知道操作成功了,还是由于某个原因失败了。这个时候你就要使用回调函数,来通知前台的操作是否成功。觉个更简单的例子,你女朋友要出远门,你给你女朋友一个电话,让她每过了一个地方给你回个电话,在这个过程中,你女朋友通过电话告诉你她位置的变化这个过程就是回调函数。

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) |
0

上一篇:H264 RTP PayLoad 格式

下一篇:TinyXML的使用

给主人留下些什么吧!~~