Como é que um acesso a 'NameThreadForDebugging' em Delphi 2010
-
18-09-2019 - |
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;
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.