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;