procedure TMyThread.Execute;
  while not Terminated do begin
    case State of
    0:begin
      WaitForSingleObject(hSemaphore, INFINITE);
      ......
      State:=1;
    end;
    1:begin
      ......
      State:=2;
    end;
    2:begin
      ......
      State:=3;
    end;
    3:begin
      ReleaseSemaphore(hSemaphore, 1, nil);
      ......
    end;
    4:begin
      ......
    end;
    ......
    end;
  end;
end;procedure TMainForm.btnStartClick(Sender: TObject);
var i:integer;
begin
  CloseHandle(hSemaphore);
  hSemaphore := CreateSemaphore(nil,1,1, nil);  
  for i:=0 to 2 do begin
    SetLength(MyThread,i+1);
    MyThread[i]:=TMyThread.Create(True);
    MyThread[i].FreeOnTerminate:=True;
    MyThread[i].Resume;
  end;
end;
目的:Case中0~3步同一时间只有一条线程运行。
问题:第1条线程释放信号量时2、3线程同时跳出WaitForSingleObject,望高手帮忙!