我在线程中使用了
               while GetMessage(MsgRec, 0, 0, 0) do
                begin
                  TranslateMessage(MsgRec);
                  DispatchMessage(MsgRec);
                  if abool=true then  Break;
                end;
  接受值方式。但是当他接收到一定的程度后整个线程就处于休眠期了..  我想问的是.当线程处于休眠的情况下。有什么办法判断他是不是正在休眠状态.又该如何唤醒...

解决方案 »

  1.   


      case WaitForSingleObject(线程句柄,1) of   
              WAIT_OBJECT_0:ShowMessage('线程存在   且正在运行');   
              WAIT_TIMEOUT:ShowMessage('线程存在   且暂时没有运行');   
              WAIT_FAILED   :ShowMessage('无效Handle   ');   
          end;   
    WAIT_TIMEOUT状态,你试试,看看能否判断线程是否休眠
      

  2.   

    一直提示无效Handle
      到底这一个句柄在线程的获取方式是什么。(我用的是delphi线程类)
      var
       TbeadID: THandle;
      begin
      TbeadID:=ThreadId;        //一定要发送线程ID,要不然肯定不行
     
      我在定时器加上这一句时。。就一直提示无效Handle
      case WaitForSingleObject(TbeadID,1) of
              WAIT_OBJECT_0:ShowMessage('线程存在   且正在运行');
              WAIT_TIMEOUT:ShowMessage('线程存在   且暂时没有运行');
              WAIT_FAILED   :ShowMessage('无效Handle   ');
     end;
      

  3.   

    当没有消息的时候GetMessage就会阻塞,如果不想让它阻塞,可以使用PeekMessage,然后再自己处理Sleep
      

  4.   

    我用了以下的方法后。发现一个问题。
                   while PeekMessage(MsgRec, 0, 0, 0, 0) do
                    begin
                      GetMessage(MsgRec, 0, 0, 0);
                      TranslateMessage(MsgRec);
                      DispatchMessage(MsgRec);
                      Sleep(1000);
                      if abool=true then  Break;
                    end;就是本来只发送一次的包。而现在他却要发送二个包。同时建立二个链接。。原因在哪里呀?(以上方法解决了我一开始的问题)