Ho una discussione, chiamata TAlertThread. Il thread interagisce con il proprietario attivando eventi. Ad esempio, quando determinati dati sono disponibili all'interno del thread, imposta alcune variabili temporanee e chiama Synchronize (UpdateAlert) che a sua volta attiva l'evento appropriato.Delphi - Thread non in esecuzione nel form ActiveX - ma altrove
Ora il thread funziona perfettamente in qualsiasi applicazione Windows standard. Il mio problema è quando inserisco quel thread all'interno di un form ActiveX (TActiveForm). Il controllo ActiveX (noto anche come oggetto COM) viene quindi incorporato all'interno di un gadget di Windows Desktop (tramite HTML/Javascript). Ho anche esperienza con questo, il gadget non è il problema. Il componente ActiveX funziona correttamente nella sua destinazione, ad eccezione del fatto che il thread non viene mai eseguito. Viene persino chiamato ESATTAMENTE nello stesso modo in cui l'ho chiamato dall'App.
Questa è una limitazione con ActiveX, che impedisce l'esecuzione dei thread? Non lo penserei, perché funzionano altre cose che richiedono thread internamente (come TADOConnection). In effetti sto correttamente chiamando CoInitialize e CoUninitialize in modo appropriato. Di nuovo, funziona perfettamente in un'applicazione, ma non funziona affatto in ActiveX.
Ecco come io chiamo questa discussione ...
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;
Per chiarire, intendo "Non funziona" come nella procedura Esegui non viene mai chiamato dal thread. –
Umm .. manca l'override sulla dichiarazione del metodo di esecuzione? Solo una supposizione: non ho mai visto accadere nulla di simile. I miei thread raggiungono sempre la prima riga del metodo di esecuzione prima di esplodere. –
Oh - 'tpIdle'. Prova ad accedervi in tpNormal, solo per ora .. –