delphi - WaitForMultipleObjects 和 64 个线程

标签 delphi worker-thread waitformultipleobjects

根据微软的文档MAXIMUM_WAIT_OBJECTS64(要等待的最大句柄数),但有时由于某种原因(因为随机)WaitForMultipleObjects返回 WAIT_FAILED ($FFFFFFFF),GetLastError 返回 ERROR_INVALID_HANDLE (6)。我做错了什么?

procedure TForm1.Button1Click(Sender: TObject);
var ArrayOfHandles:array of THandle;
    Threads,x:byte;
    ReturnValue:Cardinal;
begin

  Threads:=64;
  SetLength(ArrayOfHandles,Threads);

  for x:=0 to Threads-1 do
  begin
    WorkerThread:= TWorkerThread.Create(True);
    ArrayOfHandles[x]:=WorkerThread.Handle;
    WorkerThread.FreeOnTerminate:=true;
    WorkerThread.Priority := tpNormal;
    WorkerThread.Resume;
  end;

  ReturnValue:=WaitForMultipleObjects(Threads,@ArrayOfHandles[0],false,INFINITE);
  ShowMessage('ReturnValue='+IntToStr(ReturnValue)+#13+'GetLastError='+IntToStr(GetLastError));

end;

procedure TWorkerThread.Execute;
begin

  sleep( Random(1000) );

end;

最佳答案

好的。我是个白痴。这一定是假的!

WorkerThread.FreeOnTerminate:=false;

关于delphi - WaitForMultipleObjects 和 64 个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45651142/

相关文章:

delphi - GetDateFileModified 夏令时

delphi - Firemonkey TTabControl

string - x.xxxx 不是有效的 float 。语言/本地语言之间的转换

c++ - Qt 中多线程的 Worker 类

pointers - @H和@H[0]之间的区别

delphi - 如何在 FireMonkey 中制作圆形按钮?

node.js - 网络请求的并行化对于 Node.js 工作线程来说是一个很好的用途吗?

c++ - 如何在 C++ 中使用 waitformultipleobjects

c++ - 如何在一次调用中释放多个互斥量