关闭

函数指针和回调函数

标签: 回调函数
172人阅读 评论(0) 收藏 举报
分类:

工作中经常用到回调函数这个东西,用了一段时间后也记录一下自己对回调函数的理解。
当我们调用第三方的库时,不论是windows下的dll还是linux下的so库,很多接口都会把一个函数当成参数传递进去,这个函数一般就叫做回调函数,传递的过程一般也就是绑定回调的过程。用个栗子来说明一下吧,这样更清晰一些,比如,有一个第三方的接口sdk_func,我知道它的作用是处理数据,并且能够把处理到的偶数告诉我,但是我不知道它什么时候会处理到偶数,那么我就给它传递一个函数(就是回调函数)吧,它的作用就是告诉sdk_func:当你处理到偶数时,调用我传递给你的这个函数,我就知道了。这样,当我注册好回调后,我就可以放心去干其他事了,因为当sdk_func处理到偶数时,它会主动告诉我。

用代码来表示一下:

#include "stdafx.h"

typedef int (*p_func)(int a); //函数指针

int cb_func(int a) { //回调函数
	printf("%d\t",a);
	return 0;
}

int sdk_func(p_func func){ //可以理解为第三方库,通常我们不需要知道它的内部逻辑,知道功能就行了。
	for (int i =0; i<= 100 ; ++i) {
		if (i % 2 == 0) {
			func(i);
		}
	}
	return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
	sdk_func(cb_func); //调用第三方库,并将回调函数传递进去
	int a;
	scanf("%d",&a);
	return 0;
}
当然,第三方库的接口中,和回调函数一起传递的一般还有用户数据:udata,在第三方接口内这个udata也会当做回调函数的参数回传过去,这样方便我们在回调函数中做一些自己的操作。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:46130次
    • 积分:942
    • 等级:
    • 排名:千里之外
    • 原创:42篇
    • 转载:37篇
    • 译文:0篇
    • 评论:8条
    文章分类
    最新评论