Quando si crea un discendente TThread utilizzando la tavolozza degli strumenti nel BDS, è possibile fornire un nome per il thread. Ecco il codice generato automaticamente. Basta chiamare la funzione SetName() nel metodo Execute e il filo di chiamare questo metodo viene assegnato un nome in una sorta di strano modo ...Discussioni denominate in Delphi: a cosa serve?
{$IFDEF MSWINDOWS}
type
TThreadNameInfo = record
FType: LongWord; // must be 0x1000
FName: PChar; // pointer to name (in user address space)
FThreadID: LongWord; // thread ID (-1 indicates caller thread)
FFlags: LongWord; // reserved for future use, must be zero
end;
{$ENDIF}
{ TTestThread }
procedure TTestThread.SetName;
{$IFDEF MSWINDOWS}
var
ThreadNameInfo: TThreadNameInfo;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
ThreadNameInfo.FType := $1000;
ThreadNameInfo.FName := 'ThreadName';
ThreadNameInfo.FThreadID := $FFFFFFFF;
ThreadNameInfo.FFlags := 0;
try
RaiseException($406D1388, 0, sizeof(ThreadNameInfo) div sizeof(LongWord), @ThreadNameInfo);
except
end;
{$ENDIF}
end;
Trovo veramente utile durante il debug per non si può vedere solo TID, ma anche nomi di thread assegnati in questo modo. Sai qual è il filo grazie a questo.
Per favore dimmi, tuttavia, se il nome assegnato è accessibile in qualsiasi modo. Può essere letto in base alla maniglia di un thread? O può essere letto anche da "fuori" il processo con un altro processo? Sai, ci sono applicazioni che elencano i tuoi processi e i thread che vi lavorano. Questo nome sarà accessibile ad app del genere?
Grazie!
Per chiunque cerchi come impostare il nome del thread WHILE nel debugger, questo docwiki l'argomento dovrebbe aiutare: Manualmente: http://docwiki.embarcadero.com/RADStudio/Seattle/en/Naming_a_Thread_While_Debugging Nel codice: http://docwiki.embarcadero.com/Libraries/Seattle/en/System.Classes.TThread.NameThreadForDebugging –