Tengo un hilo, llamado TAlertThread. El hilo interactúa con su propietario activando eventos. Por ejemplo, cuando ciertos datos están disponibles dentro del hilo, establece algunas variables y llamadas temporales Sincronizar (UpdateAlert) que a su vez desencadena el evento apropiado.Delphi - El hilo no se ejecuta en forma ActiveX - pero lo hace en otro lugar
Ahora el hilo funciona perfectamente en cualquier aplicación de Windows estándar. Mi problema es cuando coloco ese hilo dentro de un formulario ActiveX (TActiveForm). El control ActiveX (también conocido como objeto COM) se integra dentro de un gadget de escritorio de Windows (a través de HTML/Javascript). También tengo experiencia con esto, el gadget no es el problema. El componente ActiveX funciona bien en su destino, excepto que el hilo nunca se ejecuta. Incluso se está llamando EXACTAMENTE de la misma manera que lo llamé desde la aplicación.
¿Existe alguna limitación con ActiveX para bloquear los hilos de ejecución? No lo creo, porque otras cosas que requieren subprocesos internos (como TADOConnection) funcionan. De hecho, estoy llamando apropiadamente CoInitialize y CoUninitialize apropiadamente. De nuevo, funciona perfecto en una aplicación, pero no funciona en absoluto en ActiveX.
Así es como puedo llamar a este hilo ...
procedure TRMPDashXS.ExecThread;
begin
//Thread created suspended
lblStatus.Caption:= 'Executing Thread...';
fThread:= TAlertThread.Create(fConnStr); //fConnStr = connection string
fThread.Priority:= tpIdle;
fThread.OnConnect:= Self.ThreadConnected;
fThread.OnDisconnect:= Self.ThreadDisconnected;
fThread.OnBegin:= Self.ThreadStarted;
fThread.OnFinish:= Self.ThreadFinished;
fThread.OnAlert:= Self.ThreadAlert;
fThread.OnAmount:= Self.ThreadAmount;
fThread.Resume; //Execute the thread
end;
Para aclarar, me refiero a "No funciona", ya que en el procedimiento Ejecutar nunca se llama por el hilo. –
Umm ... ¿falta 'anular' la declaración del método de ejecución? Solo una suposición: nunca había visto que sucediera algo así. Mis hilos siempre alcanzan la primera línea del método de ejecución antes de explotar. –
Oh - 'tpIdle'. Trate de subir eso a tpNormal, solo por ahora ... –