简介:
回调函数是一个通过函数指针调用的函数。所谓函数指针,就是指向函数的指针变量;而回调函数是一个函数。
如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
通常,回调函数是在特定环境或者条件下被执行,或者说,调用这个函数需要一定的条件。
回调函数作为参数传递个调用者,由调用者来调用回调函数。
例子代码:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
/**
* 回调函数的测试:在主函数中,根据时间差来判断是否调用回调函数。
**/
//回调函数的定义
void OutputTime(char* timeStr)
{
char* s = "hello world!";
if (timeStr) {
printf("hello world,%s\n",timeStr);
}
}
//回调函数的调用者
void CallBack(void (*CB)())
{
time_t cur_time;
char *pc ;
cur_time = time(NULL); //获取系统当前时间
pc=ctime(&cur_time) ;
CB(pc);
}
//主函数
int main(int argc,char* argv[])
{
time_t first, second; //typedef time_t long
first = time(NULL); //获取系统当前时间
while(1) {
second = time(NULL); //获取系统当前时间
float diff = difftime(second,first);
//根据时间差来判断是否调用回调函数
if (diff >=3) { //3s
printf("The difference is: %f\n",diff);
//调用回调函数
CallBack(OutputTime);
break;
}
}
return 0;
}
运行结果:
The difference is: 3.000000
hello world,Tue Nov 17 19:05:43 2009
说明:
1)time()函数用于获取时间;
2)difftime()函数用于计算时间差;
3)OutputTime()函数是回调函数,它的功能是输出参数为timeStr的时间字符串;
4)CallBack()函数是调用者,它的参数是一个指针,这个参数就是最后要被执行的回调函数。