总的来说一句话:回调函数是同步,消息机制是异步的
什么时候用回调函数,什么时候用消息机制,看下面的例子
例如:当需要比较数据大小时,不是去调用回调函数,而是借 API 函数 SendMessage 向指定窗口发送消息。收到消息方负责比较数据大小,把比较结果通过消息本身的返回值传给消息发送方。所实现的功能与回调函数并无不同。当然,此例中改为消息纯属画蛇添脚,反倒把程序搞得很慢。但其他情况下并非总是如此,特别是需要异步调用时,发送消息是一种不错的选择。假如回调函数中包含文件处理之类的低速处理,调用方等不得,需要把同步调用改为异步调用,去启动一个单独的线程,然后马上执行后续代码,其余的事让线程慢慢去做。一个替代办法是借 API 函数 PostMessage发送一个异步消息,然后立即执行后续代码。这要比自己搞个线程省事许多,而且更安全。
使用回调函数的例子:
#include <iostream>
using namespace std;
typedef void (*pfunc)();
void pout()
{
cout << "pout" << endl;
}
int main()
{
pfunc pFunc = pout;
pFunc();
getchar();
return 0;
}