发送消息的疑惑解决方法

发送消息的疑惑
有一段代码
OnCreate()
{
    ...........
    PostMessage(WM_INITCONFIG,   0,   0);
    return   0;
}

WM_INITCONFIG   映射了一个   OnInitConfig函数

请问各位     为什么不直接调用OnInitConfig函数   而是发消息呢?

不太理解

------解决方案--------------------
要看设计意图是什么了。呵呵
------解决方案--------------------
用MSDN查看一下PostMessage()就知道为什么不直接调用OnInitConfig函数了
------解决方案--------------------
PostMessage是发送消息后不等执行完毕就立即返回
------解决方案--------------------
一个同步!
一个异步!
PostMessage发送消息后不等执行完就返回
如果直接调用OnInitConfig,那么当前线程就得等这个函数执行完再继续执行下去!

好处就是你上面说的 作者说的防止程序堵死 让程序运行快一些



------解决方案--------------------
不好意思!
我上面的理解好象也有点问题!
如果PostMessage消息发往的是当前线程的消息队列的话!
我感觉跟直接调用OnInitConfig效果是一样的!

------解决方案--------------------
有一段代码
OnCreate()
{
...........
PostMessage(WM_INITCONFIG, 0, 0);
return 0;
}

WM_INITCONFIG 映射了一个 OnInitConfig函数

请问各位 为什么不直接调用OnInitConfig函数 而是发消息呢?

不太理解

-------------------------

直接调用函数是同步执行,也就是要执行完OnInitConfig函数以后才会去执行下面的代码。
而通过发送消息,就好比创建一个线程来执行这个函数,是异步的。不会阻塞调用函数的执行。
------解决方案--------------------
楼主!我再补充下!
我上面说的如果PostMessage消息发往的是当前线程的消息处理队列的话!
执行OnInitConfig这个函数的时候都会阻塞当前线程的运行!

我想作者在OnCreate用PostMessage主要目的是(个人理解):
因为系统在发送WM_CREATE消息后,可能当前的消息队列里有WM_PAINT等窗体绘制消息

这里使用PostMessage和直接调用OnInitConfig就有区别了!
如果OnInitConfig这个函数代码运行时间比较长,直接使用OnInitConfig的话它会使窗体的绘制延后,这样会使用户感觉到程序运行后,过一会窗体才呈现出来!
如果使用PostMessage的话,这个消息会被放到消息队列的末尾,也就是WM_PAINT等消息的后面,这样就是等WM_PAINT等消息被处理后,这个消息才被处理,也就是窗体先呈现,再运行OnInitConfig!

我觉的就是一个窗体显示效果的问题,直接使用OnInitConfig,窗体延后显示,PostMessage
窗体先显示,再运行OnInitConfig!

------解决方案--------------------
大家说的比较明白了,PostMessage相当于异步调用。