在一个线程里用getmessage()得到消息,怎么才能退出这个消息循环?

解决方案 »

  1.   

    PostThreadMessage(ThreadId,WM_QUIT,0,0);
      

  2.   

      while not Terminated  do
      begin
        if fcinit='n' then
        begin
          FSPComm:=Tcomm.Create(nil);
          FSPComm.BaudRate:=9600;
          FSPComm.CommName:='COM5';
          FSPComm.StopBits:=TStopBits(1);
          FSPComm.StartComm;
           FSPComm.OnReceiveData:=onrecive;      fcinit:='y';
          suspend;
        end;
        Fmessage:=true;
        FSPComm.OnReceiveData:=onrecive;
        str:=attest+#13#10;
        FSPComm.WriteCommData(Pchar(str),length(str));
        while GetMessage(Msg,0,0,0) do
        begin
          TranslateMessage(Msg);
          DispatchMessage(Msg);
        end;
      end;
      { Place thread code here }
    end;
    procedure Thread.onrecive(Sender: TObject; Buf: Pointer; BufLength: Word);
    var
    byte_rec2:string;
    begin
      sleep(100);
      setlength(byte_rec2,buflength);
      move(buf^,Pchar(@byte_rec2[1])^,buflength);
      Fmemo.Lines.Add(trim(byte_rec2));
    end;
    这是线程的execute里的代码   线程创建的时候创建了spcomm控件,然后挂起,当再次唤醒的时候,调用spcomm发送指令 然后就进消息循环了,出不来了,当onrecibe事件被触发,虽然还能收到消息可以再memo上显示结果,但是writecommdate我就没法在调用了啊?该怎么办,目的是,onrecive被触发我就能得到消息且我能随时控制writecommdate事件.高手帮忙啊!!谢谢了
      

  3.   

    其实就是我在窗体上有个按钮,当按钮被按下就产生writecommdata事件  消息循环一直不退出实时的获得onreceive事件
      

  4.   

    了解一下GetMessage消息!
    GetMessage 
    向线程发送WM_QUIT消息,返回值将是0,返回值为0,则退出循环
      

  5.   

    其实我是不想退出循环的,循环一直要进行,就是在循环的同时我还能触发writecommdate事件是最好的~~
      

  6.   


    你在里边加个自定义消息, 用RegisterWindowsMessage注册下,然后再发送过去, 在线程消息循环里加个消息处理 试下