什么是回调:
软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用,回调,异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用。 回调是一种双向调用模式,被调用方在接口被调用时也会调用对方的接口。异步调用是一种类似消息工事件的机制,不过它的调用方向刚好相反,接口的服务在收到某件信息或发生某件事件时,会主动通知客户方(即调用客户方的接口). 回调和异步调用的关系非常紧密,通常使用回调来实现异步消息的注册,又通过异步调用来实现消息的通知。
回调函数,回调对象:
在过程化语言中,回调通过回调函数来实现。
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM IParam)
windows下的窗口消息函数就是一回调函数。
在面向对象的语言中,回调是通过接口或抽象类来实现的。这种接口类称为回调类,回调类的对象称为回调对象。
class MTest //接口类(回调类)
{
public:
virtual void fun1()=0;
virtual void fun2()=0;
}
class B;
class A:public MTest //接口类(回调类)的实现类
{
public:
MTest()
{
b=new B(*this);
}
void fun1() {};
void fun2() {};
private:
B * b;
}
class B //调用回调对象
{
public:
B(MTest & mTest)
{
}
void Fun1()
{
....
mTest.fun1(); //回调对象调用回调函数进行回调, 通知A某事情已发生。 调用完后交给B继续执行。
....
}
privata:
MTest mTest;
}