首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

再问PostMessage?解决方案

2012-03-09 
再问PostMessage?我在程序中定义了4个消息#define WM_MYMSG_ch1 WM_USER+101#define WM_MYMSG_ch2 WM_USER

再问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);
PostMessage(FDownload->Handle,WM_MYMSG_ch2, 0,0);
PostMessage(FDownload->Handle,WM_MYMSG_ch3, 0,0);
PostMessage(FDownload->Handle,WM_MYMSG_ch4, 0,0);

请问这4个消息在消息队列中是一个一个按顺序处理还是并行处理?
会不会存在当前消息正在处理就响应下一个消息,即两个消息同时 处理?怎么做才能保证只有当前消息处理完成的才能处理下一个消息?

[解决办法]
想要当前消息处理完成的才能处理下一个消息,请用SendMessage
[解决办法]

探讨
顺序发送了四个消息:
PostMessage(FDownload->Handle,WM_MYMSG_ch1, 0,0);
PostMessage(FDownload->Handle,WM_MYMSG_ch2, 0,0);
PostMessage(FDownload->Handle,WM_MYMSG_ch3, 0,0);
PostMessage(FDownload->Handle,WM_MYMSG_ch4, 0,0);

请问这4个消息在消息队列中是一个一个按顺序处理还是并行处理?
会不会存在当前消息正在处理就响应下一个消息,即两个消息同时 处理?怎么做才能保证只有当前消息处理完成的才能处理下一个消息?

[解决办法]
系统处理消息肯定是按顺序进行分配到具体消息处理过程的的,问题的每个消息处理的时间是不一样的,如果第1个消息比第2个消息处理时间长,那么第2个消息,甚至第3、4个消息就会在第1个消息完成前处理完毕。所以,要保证当前消息处理完成后才能处理下一个消息,只能用SendMessage一个个等待处理
[解决办法]
学习下。
[解决办法]
首先要清楚的是单线程的应用程序肯定在顺序执行的。
如果在处理proc1()的时候没有退出的话,任何其它本进程的函数都不可能被执行到的。

单个CPU的计算机不会有真正的并行的,所以这里不用但心,决对会一个一个的执行的。

[解决办法]
探讨
系统处理消息肯定是按顺序进行分配到具体消息处理过程的的,问题的每个消息处理的时间是不一样的,如果第1个消息比第2个消息处理时间长,那么第2个消息,甚至第3、4个消息就会在第1个消息完成前处理完毕。所以,要保证当前消息处理完成后才能处理下一个消息,只能用SendMessage一个个等待处理

热点排行