for  i  :=  1  to  6000 do
begin
  //WaitFor Semaphore会尝试将hSemaphore++,但你的CreateSemaphore的初始值是ReleaseCount,即等于最大值,将它变为0,就要waitfor返回了
  WaitForSingleObject(hSemaphore,INFINITE);  p1:=@i;
  hMasterThread[i]:=CreateThread(nil,0,@checkport,p1,0,dwThreadID[i]);
  if hMasterThread[i]=0 then
    APPLICATION.MessageBox('thread创建错误!','注意',mb_ok); 
 
  //WaitFor到这里,当hSemaphore被Release才会能-1;
  WaitForSingleObject(hSemaphore,INFINITE);
end;//for