回调函数
打个比方,有一家旅馆提供叫醒服务,但是要求旅客自己决定叫醒的方法。可以是打客房电话,也可以是派服务员去敲门,睡得死怕耽误事的,还可以要求往自己头上浇盆水。这里,“叫醒”这个行为是旅馆提供的,相当于库函数,但是叫醒的方式是由旅客决定并告诉旅馆的,也就是回调函数。而旅客告诉旅馆怎么叫醒自己的动作,也就是把回调函数传入库函数的动作,称为登记回调函数(to register a callback function)
看代码片段,及输出打印
typedef void (*vpv)();
void parentFunc(vpv callBack)
{
callBack();
int sleepSecond = 0;
while(1)
{
sleepSecond = rand();
Sleep(sleepSecond*1000);
cout<<"parent..."<<sleepSecond<<endl;
}
}
void childFunc()
{
int sleepSecond = 0;
while(1)
{
sleepSecond = rand();
Sleep(sleepSecond*1000);
cout<<"child..."<<sleepSecond<<endl;
}
}
void CallBackPractice()
{
srand(time(NULL));
parentFunc(&childFunc);
}
输出如下:
child...8
child...2
child...1
child...1
child...7
child...8
child...3
child...3
child...2
child...9
child...5
child...0
child...3
child...1
child...7
child...1
- 回复小熊博士2个月前这么说的话应该还是得等回调函数执行完