В моем приложении есть несколько потоков: 1) основной поток 2) 2 подосновных потока (каждый с циклом сообщений, как показано ниже), используемые TFQM 3) n рабочих потоков (простой цикл, содержащий Sleep())
Моя проблема в том, что когда я закрываю свое приложение, рабочие потоки удается правильно выйти, но 1 из 2 вспомогательных основных потоков зависает (никогда не выходит), когда я запускаю WM_QUIT, чтобы закрыть их.
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;