一、说明
上一节,我们简单的提了一下,为了得知搜索的进度,我们采用了回调函数的方式来实现进度条,当然你也可以开个线程或者定时器来实现,但是这一篇,我们主要来谈一谈回调函数
二、一个简单的回调函数
#include <stdio.h>
typedef void(*lpFunc)(void *, char *); // 函数指针
// 回调函数的宿主函数,在这里回调用函数被使用,
void GetCallBack(void * lpVoid, lpFunc callback)
{
callback(lpVoid, "test");
}
class A{
public:
A(){};
void outName(char szAlarm[]){
printf("my name is %s /n", szAlarm);
}
// 被宿主调用的回调函数
static void fCallback(void *lpVoid, char szAlarm[]){
A * p = (A*)(lpVoid);
p->outName(szAlarm);
}
//调用外部宿主函数,当Test函数调用过宿主函数以后,Test就再也不关心宿主函数
//什么时候调用回调函数了,因为那时宿主函数自己的事了
void Test(){
GetCallBack(this, fCallback);
}
};
int main(void)
{
A a;
a.Test();
}
三、本程序中的回调
3.1 声明
首先声明一个函数指针,并声明两个此函数指针类型的回调函数,一个用来首次扫描,一个用来再次扫描,其中有三个参数,分别为:参数(进度条指针)、页数(内存需要查的页数)、索引(当前查找的位置),即 索引/页数 = 当前已经搜索的比例
3.2 传递指针
这个就相当于成员变量的set写法,只是为了传递一下指针。
3.3 回调函数
这是两个回调函数的实现,
3.4 调用
OnInitDialog中调用set传递指针,m_pFinder为search类的句柄。