Mi aplicación tiene varios hilos: 1) Tema principal 2) 2 Hilos Sub-principales (cada uno con bucle de mensajes, como se muestra a continuación), utilizados por TFQM 3) n subprocesos de trabajo (simple loop, que contiene Sleep())Delphi Multi-Threading Mensaje Loop
Mi problema es que cuando cierro mi aplicación, los subprocesos de trabajo logran salir correctamente, pero 1 de los 2 Sub-Main Threads se cuelga (nunca sale) cuando publico WM_QUIT para cerrarlos .
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;
Ooops, lo siento la primera vez que estoy aquí. No sabía acerca de los comentarios ... Lo intentaré. Gracias. – Atlas
Davy tiene razón: debe usar PeekMessage para crear Message Queue – Remko
Lo ha leído en la [página de MSDN para 'PostThreadMessage'] (http://msdn.microsoft.com/en-us/library/ms644946 (VS.85)) .aspx). Incluso recomiendan que el hilo principal espere un evento que el hilo establece una vez que se ha creado su mensaje. –