请教了,我发送个消息到另一个程序代码如下:
   if addr>10 then //地址>10就发消息
     sendMeg;
  if (addr<1 )or (addr>10 )then close;//关闭
发送完后就直接关闭,但不知道为什么,它老是等到另一个程序完成一切过程了,这个程序才关闭
,请教这是为什么这把代码改为:
   if addr>10 then //地址>10就发消息
   begin
     sendMeg;
     close
   end;
也不行,不知道怎么办才能让它发完消息马上关闭

解决方案 »

  1.   

    如果另一个程序忙时,该程序不会响应收到的消息,这种情况下如果使用sendmessage发送消息的话,sendmessage函数在另一个程序呼应之前不会返回,当然的也不会执行到close。建议使用postmessage,这样的话postmessage函数在另一个程序响应之前会返回。
      

  2.   

    那么接收消息要不要改变呢
    我还来的程序是这样接收的
    procedure Mymessage(var t:TWmCopyData);message WM_COPYDATA;procedure TPing.Mymessage(var t: TWmCopyData);
    begin
      Label1.Caption:='得到收集器数据!';
      Edit1.text:=StrPas(t.CopyDataStruct^.lpData);//接受数据并显示。
      delay(10);
      HeBingSj;end;
      

  3.   

    除了把sendmessage改成postmessage外不要作任何修改。
      

  4.   

    如果消息队列过长的话程序会丢掉部分消息,如果你写的接收程序忙(如调用了很大的循环)可以多加application.processmesasge语句,如:
    procedure TForm1.Button1Click (Sender : TObject);
    begin
      while ture do
      begin
        //..
        application.Proecssmessage;
      end;
    end;
      

  5.   

    要不要用GetMessage来得到消息呀