2009-09-28 8 views
5

Come accedere al 'NameThreadForDebugging' in una discussione delphi in Delphi 2010?Come si accede a 'NameThreadForDebugging' in Delphi 2010

type 
    TMyThread = class(TThread) 
    protected 
    procedure Execute; override; 
    procedure UpdateCaption; 
    end; 

implementation 

procedure TMyThread.UpdateCaption; 
begin 
    Form1.Caption := 'Name Thread For Debugging'; 
    // how I get 'TestThread1' displayed in the caption 
end; 


procedure TMyThread.Execute; 
begin 
    NameThreadForDebugging('TestThread1'); 
    Synchronize(UpdateCaption); 
    Sleep(5000); 
end; 

risposta

13

La funzione NameThreadForDebugging è, come suggerisce il nome, solo per il debug. Se si desidera tenere traccia del nome per altri scopi, quindi prenotare un campo nell'oggetto thread e memorizzare il nome lì. Usa quel campo per nominare il thread e per popolare la didascalia del tuo modulo su richiesta.

Non esiste alcuna API per il recupero del nome di un thread poiché i thread non hanno nomi a livello di API. NameThreadForDebugging genera un'eccezione speciale che l'IDE riconosce come eccezione "nome questo thread". Vede l'eccezione (dal momento che è un debugger), prende nota del nome del thread nelle proprie strutture di dati di debug interno e quindi consente all'applicazione di continuare a funzionare. L'applicazione rileva e ignora l'eccezione.

Questo trasferimento di dati è a senso unico, però. L'applicazione può inviare informazioni al debugger tramite un'eccezione, ma il debugger non può inviare dati indietro. E il sistema operativo è ignaro di tutto. Per il sistema operativo, è proprio come qualsiasi altra eccezione.

+3

Come una piccola appendice, l'uso di questo metodo per la denominazione dei thread è una convenzione tra gli IDE. In particolare, anche Visual Studio lo preleva. –

+0

Vedere anche questo post di Chris Hesik: http://blogs.embarcadero.com/chrishesik/2009/10/22/34895 –

+0

Questo blog è stato rimosso dall'autore, ma l'articolo è ancora qui http: // web. archive.org/web/20101214193506/http://blogs.embarcadero.com/chrishesik/2009/10/22/34895 vedi anche questa domanda SO: http://stackoverflow.com/questions/3864306/named-threads-in -delphi-what-is-that-for –

-2

AFAICS Delphi supporta solo il nome delle impostazioni. Dovrai chiamare alcune funzioni API di Windows per ottenere il nome.

+0

-1 perché Delphi non è l'unico IDE che supporta i nomi di thread, e perché non esiste un'API per recuperare il nome di un thread (previsto in .NET) poiché i nomi dei thread non sono disponibili nel livello API. –

0

L'unità DebugThreadSupport sull'esempio Code Central ID: 21893, Named Pipes, mostra come impostare il nome del thread nelle versioni precedenti di Delphi.

+0

Quello che hai scritto qui è vero, ma in realtà non risponde alla domanda. Inoltre, il codice che hai collegato fornisce un modo per nominare un thread, ma, come il codice VCL incorporato, non fornisce un modo per recuperare il nome. –

2

di fare ciò che si chiede, è necessario memorizzare il nome all'interno della vostra classe thread in cui è possibile accedere, ad esempio:

type 
    TMyThread = class(TThread) 
    protected 
    FName: String; 
    procedure Execute; override; 
    procedure UpdateCaption; 
    end; 

procedure TMyThread.UpdateCaption; 
begin 
    Form1.Caption := FName; 
end; 

procedure TMyThread.Execute; 
begin 
    FName := 'TestThread1'; 
  NameThreadForDebugging(FName); 
  Synchronize(UpdateCaption); 
  Sleep(5000); 
end; 
Problemi correlati