C++ 回调函数学习笔记

来源:互联网 发布:降龙990数据恢复 编辑:程序博客网 时间:2024/05/24 01:48

      回调函数,百度百科给的解释是:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

废话不多说,先上代码。

/////////利用回调函数实现自定义定时器////////////////
#include <iostream>#include <time.h>using namespace std;void MyTimer(unsigned timeGap);void MySetTimer(void (*functor)(unsigned timeGap), unsigned timeGap);int main(){cout<<"请输入时间间隔"<<endl;unsigned timeGap;cin>>timeGap;MySetTimer(MyTimer, timeGap);return 0;}void MyTimer(unsigned timeGap){static int i=0;clock_t start= clock();clock_t now;int _time;while (true){now = clock();_time = now-start;if (_time%timeGap==0){cout<<"第"<<++i<<"次触发"<<endl;cout<<"Hello World!"<<endl;}}}void MySetTimer(void (*functor)(unsigned), unsigned timeGap){MyTimer(timeGap);}

运行结果如下:



程序每隔1秒被触发一次,输出“Hello World!”,比较简单,唯一值得强调的是下面这部分代码中的functor,它是一个函数指针,能够接受所有返回类型为void含有一个unsigned参数的函数的地址。

void MySetTimer(void (*functor)(unsigned), unsigned timeGap){MyTimer(timeGap);}


        例如可以另外定义一个函数MyTest如下:

void MyTest(unsigned n){///////////}

      在主函数中即可用MySetTimer(MyTest, timeGap)来调用MyTest函数。这样便可以实现调用函数和被调用函数的分离。调用者不关心谁是被调用者,也不关心被调用者内部是怎么实现的,所有它需知道的只是存在某种特定类型的函数而已。这样也相当于实现了对被调用者的封装,可以通过一个函数原型实现一系列不同的函数操作。