c++ 回调函数

回调函数

回调函数就是通过函数指针调用函数

最大的作用就是解耦合

一、原理

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独自执行。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值