2009-09-28 28 views
5

¿Cómo accedo a 'NameThreadForDebugging' en un Delphi Thread in Delphi 2010?¿Cómo se accede a 'NameThreadForDebugging' en 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; 

Respuesta

13

La función NameThreadForDebugging es, como su nombre lo indica, para la depuración solamente. Si desea realizar un seguimiento del nombre para otros fines, reserve un campo en el objeto de la secuencia y almacene el nombre allí. Utilice ese campo para nombrar el hilo y rellenar los subtítulos del formulario bajo demanda.

No hay API para recuperar el nombre de un subproceso porque los subprocesos no tienen nombres en el nivel de la API. NameThreadForDebugging plantea una excepción especial que el IDE reconoce como la excepción "nombrar este subproceso". Ve la excepción (ya que es un depurador), toma nota del nombre del subproceso en sus propias estructuras internas de datos de depuración y luego permite que la aplicación continúe ejecutándose. La aplicación detecta e ignora la excepción.

Sin embargo, la transferencia de datos es unidireccional. La aplicación puede enviar información al depurador a través de una excepción, pero el depurador no puede enviar datos de vuelta. Y el sistema operativo es ajeno a todo. Para el sistema operativo, es como cualquier otra excepción.

+3

Como una pequeña adición, el uso de este método para el nombre de subprocesos _es_ una convención entre IDEs. En particular, Visual Studio lo recoge también. –

+0

Vea también esta entrada en el blog de Chris Hesik: http://blogs.embarcadero.com/chrishesik/2009/10/22/34895 –

+0

Ese blog fue eliminado por el autor, pero el artículo todavía está aquí http: // web. archive.org/web/20101214193506/http://blogs.embarcadero.com/chrishesik/2009/10/22/34895 también vea esta pregunta ASÍ: http://stackoverflow.com/questions/3864306/named-threads-in -delphi-what-is-that-for –

-2

AFAICS Delphi admite configuraciones solo por el nombre. Tendrás que llamar a alguna función API de Windows para obtener el nombre.

+0

-1 porque Delphi no es el único IDE que admite nombres de rosca, y porque no hay API para recuperar un nombre de hilo (esperar en .NET) ya que los nombres de hilo no están disponibles en la capa API. –

0

La unidad DebugThreadSupport en el ejemplo de Code Central ID: 21893, Named Pipes, muestra cómo configurar el nombre del subproceso en versiones anteriores de Delphi.

+0

Lo que escribió aquí es cierto, pero en realidad no responde la pregunta. Además, el código que ha vinculado proporciona una forma de nombrar un hilo, pero, al igual que el código VCL incorporado, no proporciona una forma de recuperar el nombre. –

2

Para hacer lo que pides, es necesario almacenar el nombre dentro de su clase hilo donde se puede acceder a ella, por ejemplo:

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; 
Cuestiones relacionadas