Delphi-Multithreading-Nachrichtenschleife

Meine Anwendung hat mehrere Threads: 1) Haupt-Thread 2) 2 Unter-Haupt-Threads (jeweils mit Nachrichtenschleife, wie unten gezeigt), verwendet von TFQM 3) n Worker-Threads (einfache Schleife mit Sleep ())

Mein Problem ist, wenn ich meine Anwendung schließe, dass die Worker-Threads ordnungsgemäß beendet werden, aber einer der beiden Sub-Main-Threads hängt (wird nie beendet), wenn ich WM_QUIT zum Schließen dieser Threads absetze.

procedure ThreadProcFQM(P: Integer); stdcall;
var
  Msg: TMsg;
 _FQM: TFQM;
begin
  _FQM := Ptr(P);
  try
    _FQM.fHandle := AllocateHwnd(_FQM.WndProc);

    while GetMessage(Msg, 0, 0, 0) do
    begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;

  finally
    DeallocateHWnd(_FQM.fHandle);
    SetEvent(_FQM.hTerminated);
  end;
end;
procedure TFQM.Stop;
begin
  PostMessage(fHandle, WM_QUIT, 0, 0);

  WaitForSingleObject(hTerminated, INFINITE);
  if hThread <> INVALID_HANDLE_VALUE then
  begin
    CloseHandle(hThread);
    hThread := INVALID_HANDLE_VALUE;
  end;
end;

Antworten auf die Frage(3)

Ihre Antwort auf die Frage