小编dav*_*nik的帖子

在阻塞主线程中使用 TEvent 和 MsgWaitForMultipleObjects

我发现了这个 Remy 有趣的代码。 Delphi:如何在本地创建和使用线程?

是否可以这样做,以便我可以执行多个线程并等待它们全部完成然后继续主线程?我像这样尝试过但没有成功......

procedure Requery(DataList: TStringList);
var
  Event: TEvent;
  H: THandle;
  OpResult: array of Boolean;
  i: Integer;
begin
  Event := TEvent.Create;
  try
    SetLength(OpResult, DataList.Count); 
    for i:=0 to DataList.Count-1 do begin
      TThread.CreateAnonymousThread(
        procedure
        begin
          try
            // run query in thread
            OpResult[i]:=IsMyValueOK(DataList.Strings[i]);
          finally
            Event.SetEvent;
          end;
        end
      ).Start;
      H := Event.Handle;
    end;
    while MsgWaitForMultipleObjects(1, H, False, INFINITE, QS_ALLINPUT) = (WAIT_OBJECT_0+1) do Application.ProcessMessages;
    
    for i:=Low(OpResult) to High(OpResult) do begin
      Memo1.Lines.Add('Value is: ' + BoolToStr(OpResult[i], True));
    end;
  finally
    Event.Free;
  end;

  // Do next …
Run Code Online (Sandbox Code Playgroud)

delphi events multithreading tthread blocking

4
推荐指数
1
解决办法
178
查看次数

标签 统计

blocking ×1

delphi ×1

events ×1

multithreading ×1

tthread ×1