Allora conta che qualsiasi oggetto è un thread separato, quindi no in quanto già fa parte di un thread.
Poi se intendi un oggetto TThred la risposta è ancora no a patto che semafori la procedura richiamandola con una flagbooleana come OkStoInUnThread o similari.
Ovviamente se fai una cosa simile (all'interno del thread)
Procedure MyThread.Execute;
Begin
Repeat
DentroThread := True;
<qui' le tue chiamate>
DentroThread := False;
Until Terminated;
End;
dove DentroThread è una booleana globale non va bene lo stesso in quanto un altro oggetto puo' benissimo chiamare la tua procedura mentre la variabile è True
Girovagando nei sorgenti di FPC 3.0.0 per altri motivi, credo di aver trovato la risposta alla mia domanda:
if (GetCurrentThreadID = MainThreadID) then begin
La procedura sta girando nel thread principale
end else begin
La procedura sta girando in un thread secondario
end;
Per il momento l'ho testata sotto Windows XP in un paio di programmi e funziona alla grande.
Stasera la testo su Linux.
Ciao, Mario