读书人

PostMessage请问

发布时间: 2012-02-03 22:02:47 作者: rapoo

PostMessage请教?
我在程序中定义了4个消息
#define WM_MYMSG_ch1 WM_USER+101
#define WM_MYMSG_ch2 WM_USER+102
#define WM_MYMSG_ch3 WM_USER+103
#define WM_MYMSG_ch4 WM_USER+104

重载了消息处理函数:
void __fastcall TFDownload::WndProc(Messages::TMessage &Msg)
{

if(Msg.Msg==WM_MYMSG_ch1)
{
proc1();
}
else if(Msg.Msg==WM_MYMSG_ch2)
{
proc2();
}
else if(Msg.Msg==WM_MYMSG_ch3)
{
proc3();
}
else if(Msg.Msg==WM_MYMSG_ch4)
{
proc4();
}

else
TForm::WndProc(Msg);
}

用PostMessage(FDownload->Handle,WM_MYMSG_ch1, 0,0);
。。。。。。。。。。。。发送消息
请问这4个消息在消息队列中是一个一个按顺序处理的吗?如果不是,怎么做才能保证只有当前消息处理完成的才能处理下一个消息?代码有问题吗?

[解决办法]
4个消息在消息队列中不是一个一个按顺序处理的,要按顺序处理用SendMessage();
[解决办法]
SendMessage该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。
[解决办法]
调用方采用 Post 或是 Send 区别只在于:调用者每次调用是否要等到处理结束。

如果你的处理函数 proc1, proc2 ... 和消息处理函数是同步的(就是说没有另起线程之类)
那么处理的顺序应该和 PostMessage 的顺序是一致的,而且是依次执行
[解决办法]
只会MFC的路过
[解决办法]
肯定是按你postMessage的顺序处理的。

读书人网 >C++ Builder

热点推荐