回调函数

回调函数

打个比方,有一家旅馆提供叫醒服务,但是要求旅客自己决定叫醒的方法。可以是打客房电话,也可以是派服务员去敲门,睡得死怕耽误事的,还可以要求往自己头上浇盆水。这里,“叫醒”这个行为是旅馆提供的,相当于库函数,但是叫醒的方式是由旅客决定并告诉旅馆的,也就是回调函数。而旅客告诉旅馆怎么叫醒自己的动作,也就是把回调函数传入库函数的动作,称为登记回调函数(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个月前这么说的话应该还是得等回调函数执行完