Pergunta

Como faço para acessar o 'NameThreadForDebugging' em um segmento Delphi em 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;
Foi útil?

Solução

O NameThreadForDebugging função é, como o próprio nome sugere, para depuração só. Se você quiser acompanhar o nome para outros fins, em seguida, reservar um campo no objeto de discussão e armazenar o nome lá. Use esse campo para nomear o fio e para preencher legenda do formulário on demand.

Não há nenhuma API para recuperar o nome de um fio porque tópicos não têm nomes em nível API. NameThreadForDebugging levanta uma exceção especial que o IDE reconhece como o "nomear esta discussão" exceção. Ele vê a exceção (uma vez que é um depurador), faz uma nota sobre o nome do segmento em suas próprias estruturas de dados de depuração interna e, em seguida, permite que o aplicativo para continuar correndo. As capturas de aplicação e ignora a exceção.

Essa transferência de dados é só de ida, no entanto. O aplicativo pode enviar informações para o depurador através de uma exceção, mas o depurador não pode enviar de volta dados. E o OS é alheio a tudo. Para o sistema operacional, é como qualquer outra exceção.

Outras dicas

Para fazer o que você pedir, você precisa para armazenar o nome dentro de sua classe segmento onde você pode acessá-lo, por exemplo:

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;

O DebugThreadSupport unidade exemplo Código Central ID: 21893, pipes nomeados , mostra como conjunto nome segmento em versões mais antigas do Delphi.

AFAICS Delphi suporta configurações só o nome. Você vai ter que chamar alguma função API do Windows para obter o nome.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top