Delphi-Multi-Threading-Message-Schleife

Meine Anwendung hat mehrere threads:
1) Haupt-Thread
2) 2 Sub-Haupt-Threads (jeweils mit Message-Loop), wie unten gezeigt), das von TFQM
3) n Worker-Threads (einfache Schleife mit Sleep())

Mein problem ist, wenn ich in der Nähe meiner Anwendung, die Worker-Threads zu verwalten, um ordnungsgemäß zu beenden, aber 1 von den 2 Sub-Haupt-Threads hängt (nie beendet), wenn ich Frage WM_QUIT, um Sie zu schließen.


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;
InformationsquelleAutor Atlas | 2008-10-23
Schreibe einen Kommentar