回调函数
回调函数就是通过函数指针调用函数
最大的作用就是解耦合
一、原理
C++学习之回调函数_c++ 回调函数_HAH-M的博客-CSDN博客
函数指针---》指向函数地址的指针。
typedef int(*callback)(int,int);
int add(int a, int b)
{
return a + b;
}
int mins(int a ,int b )
{
return a - b;
}
int addm(int a,int b,callback c)
{
return (*c)(a, b);
}
int main()
{
//callback c;
int a = 20;
int b = 30;
cout << "回调函数 : " << addm(a, b, add) << endl;
cout << "回调函数 : " << addm(a, b, mins) << endl;
system("pause");
return EXIT_SUCCESS;
}
typedef int(callBack)(const void *buffer, size_t size, char * p);
void CallFunc(callBack* consume, char *pt)
{
printf("CallFunc\n");
const void * buffer = NULL;
consume(buffer,0,pt);
}
int CallBackFunc(const void *buffer,size_t size,char * pt)
{
printf("CallBackFunc\n");
memset(pt,0x00,sizeof(char)*100);
strcpy(pt,"ssssssssssssssjijsiojojosjojfojsojsojojsojojojosjo .");
return 1;
}
int main()
{
char p[100];
CallFunc(CallBackFunc,p);
printf("%s\n",p);
cout << "============================================ " << endl;
//callback c;
int a = 20;
int b = 30;
cout << "回调函数 : " << addm(a, b, add) << endl;
cout << "回调函数 : " << addm(a, b, mins) << endl;
system("pause");
return EXIT_SUCCESS;
}
二、回调函数和普通函数的区别
回调函数的调用过程
int Callback_1() // Callback Function 1
{
printf(" Callback_1\n ");
return 0;
}
int Callback_2() // Callback Function 2
{
printf("Callback_2 \n");
return 0;
}
int Handle(int(*Callback)())
{
printf("enter Handle Function----- \n ");
Callback();
printf("Leaving Handle Function----. \n");
return 0;
}
int main()
{
printf("Entering Main Function.\n ");
Handle(Callback_1);
Handle(Callback_2);
printf("Leaving Main Function. \n");
system("pause");
return 0;
}
三、同步回调和异步回调的区别
回调可以是同步也可以是异步
同步可以是单线程也可以是多线程
异步必须是多线程或多进程(每个进程可以是单线程) ==> 换句话说,异步必须依靠多线程或多进程才能完成
(1) 同步回调:把函数b传递给函数a。执行a的时候,回调了b,a要一直等到b执行完才能继续执行;
(2) 异步回调:把函数b传递给函数。执行a的时候,回调了b,然后a就继续往后执行,b独自执行。