:= 0; FLastGetPoint := 0; // hSemRequestCount := CreateSemaphore(nil, 0, $7FFFFFFF, nil); DueTo := -1; //可等待的定时器(只用于 Window NT4 或更高) hTimCheckPoolDown := CreateWaitableTimer(nil, False, nil); if hTimCheckPoolDown = 0 then // Win9x 不支持 // In Win9x number of thread will be never decrised hTimCheckPoolDown := CreateEvent(nil, False, False, nil) else SetWaitableTimer(hTimCheckPoolDown, DueTo, 30000, nil, nil, False); end; { TThreadsPool.Create } destructor TThreadsPool.Destroy; var n, i: Integer; Handles: array of THandle; begin {$IFNDEF NOLOGS} WriteLog('线程池销毁', 5); {$ENDIF} csThreadManagment.Enter; SetLength(Handles, FThreads.Count); n := 0;
for i := 0 to FThreads.Count - 1 do if FThreads <> nil then begin Handles[n] := TProcessorThread(FThreads).Handle; TProcessorThread(FThreads).Terminate; Inc(n); end; WaitForMultipleObjects(n, @Handles[0], True, 30000); for i := 0 to FThreads.Count - 1 do TProcessorThread(FThreads).Free; FThreads.Free; FThreadsKilling.Free; csThreadManagment.Free;