var
SendCmdThread :array[0..99] of Thandle;
begin
for i :=0 to 99 do
SendCmdThread[i] := TSendCmdThread.create().Handle
end;
然后我在2MS定时器里查
procedure TForm1.Timer1Timer(Sender: TObject);
begin
For i :=0 to 99 do
      begin
        case  WaitForSingleObject(SendCmdThread[i] ,1)  of
          WAIT_OBJECT_0:    //ShowMessage('线程存在 且正在运行');
          WAIT_TIMEOUT:  begin edit1.Text  :=timetostr(Now); exit;  end;     //ShowMessage('线程存在 且暂时没有运行');
          WAIT_FAILED :  begin ShowMessage('线程无效Handle ');  exit; end;
        end;
      end;
end;

解决方案 »

  1.   

    问题一:产生100个线程,总有几个线程是WAIT_TIMEOUT状态,就那几个线程永远都不执行了,怎样才能让它们继续执行完毕呢?问题二:这100个线程执行完后,我还要继续产生100个线程即再重复一次或N次,for i :=0 to 99 do
    SendCmdThread[i] := TSendCmdThread.create().Handle
    end;会有问题吗(能按照预定的程序执行吗)?
      

  2.   

    问题一:产生100个线程,总有几个线程是WAIT_TIMEOUT状态,就那几个线程永远都不执行了,怎样才能让它们继续执行完毕呢?
    ----------------------------
    设置线程生命时间.WaitForSingleObject(h, INFINITE);第二个参数是等待毫秒数。你1ms也太短了。INFINITE 表示一直运行,除非你主动退出线程。问题二:这100个线程执行完后,我还要继续产生100个线程即再重复一次或N次,for i :=0 to 99 do
    SendCmdThread[i] := TSendCmdThread.create().Handle
    end;会有问题吗(能按照预定的程序执行吗)?
    -----------------------------------------
    可以,没问题。如果没有完成,有失控的线程。
      

  3.   

    问题一:设置线程生命时间.WaitForSingleObject(h, INFINITE);第二个参数是等待毫秒数。INFINITE如为10, 表示在等待10毫秒数,10毫秒数之后还没执行完这个线程,这个线程就有可能一直运行,永远运行,除非主动退出线程(h.Terminate),是这样理解吗?问题二,1ms也太短,有的线程要执行1S,有的线程要执行10MS,要设置多少才合适?