multithreading - Aplicación que tarda mucho tiempo en sincronizar los hilos(o no en absoluto)
delphi delphi-xe5 (1)
Estoy usando componentes REST en Delphi XE5 (iOS y Android). Actualmente estoy probando a través del simulador de iOS, y mi aplicación a menudo se cuelga en la siguiente línea dentro de mi código:
R_Request.Execute;
Después de una cierta depuración, encuentro que se cuelga específicamente en esta línea de código dentro de REST.Client.PAS:
HandleEvent(DoAfterExecute);
que se parece a
procedure TCustomRESTRequest.HandleEvent(AEventHandler: TMethod);
begin
// Handle Synchronized if we are NOT already in the main thread
// NEVER call synchronize on the MainThread - that might shift the island!
if SynchronizedEvents and (System.MainThreadID <> TThread.CurrentThread.ThreadID) then
TThread.Synchronize(TThread.CurrentThread, AEventHandler) // FAILS HERE
else
AEventHandler;
end;
O NO está devolviendo el hilo en .Synchronize o tardando un tiempo extremadamente largo (5 minutos más o menos) ... Funcionó una vez durante la depuración, pero no lo ha hecho desde ahora y otra vez (30 minutos más tarde, y después de dejarlo configurado) durante 5 minutos para devolver un hilo).
Ayuda ? ¿O al menos algún sentido de dirección que alguien pueda darme?
De nuevo, desarrollo para iOS y Android (por lo tanto, FMX ...) y actualmente se está probando a través del simulador de iOS. Gracias !
El problema es que TThread.Synchronize()
está roto en FireMonkey. Ver este informe de control de calidad:
Informe # 123579: TThread.Synchronize () y TThread.Queue () no funcionan correctamente en FireMonkey
Esto se acaba de descubrir recientemente, pero se ha roto desde que se introdujo FireMonkey por primera vez y aparentemente nadie se dio cuenta hasta ahora.
Hasta que Embarcadero lo arregle, intente llamar a CheckSynchronize()
periódicamente en el hilo principal, como en un temporizador.