Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 12 de Junho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
120 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Threads no Delphi, por onde começar ? – Parte V
Publicado por rboaro : Terça, Fevereiro 26, 2013 - 08:08 GMT-3 (724 leituras)
Comentários 9 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Diego Garcia Chegamos ao final desse estudo introdutório sobre o fantástico mundo do processamento concorrente, proporcionado pelo uso das threads. Nessa quinta e última parte, veremos algumas dicas sobre como não enlouquecer ao realizar debugging em um ambiente multi thread. Você pode até perguntar “mas qual é o real problema do debbuing em um ambiente multi thread?”. Imagine a seguinte situação, você possui uma thread que está em execução contínua (monitorando um diretório por exemplo), enquanto esta thread é executada, você inicia a depuração de outra rotina qualquer executada pela main thread. De repente, sem a menor explicação, o ponteiro do seu debug vai para outra rotina em outra unit sem a menor relação com a depuração que você estava fazendo. Quando você consegue se dar conta do que aconteceu, percebe que o ponteiro da depuração foi movido para o processamento da thread. Quem está familiarizado com um ambiente multi thread conhece bem esse tipo de história.

Para começar, vamos conhecer a janela Thread Status (View -> Debug Windows -> Threads ou Ctrl + Alt + T)


Essa janela mostra todas as threads da aplicação, assim como seu estado, status, etc. Por padrão, ao entrar em modo de debugging o próprio Delphi já abre esta janela no rodapé da tela. Esta imagem foi capturada de uma aplicação onde, além da main thread, eu tinha mais 3 threads em execução. Ainda assim, mesmo com a janela thread status aberta, não ajuda muito, pois não sei qual thread é qual. Para resolver esse problema, podemos identificar as threads em debugging através do método NameThreadForDebugging() da classe TThread. Esse método pode ser utilizado no execute da thread:
procedure TArquivoTextoInThread.Execute;
begin
Self.NameThreadForDebugging(Format('arquivo txt %d',[self.FLinhasAImprimir]));
Self.escreverArquivoDeTexto();
end;

Inclusive é possível nomear a main thread, basta utilizar um cast com a classe TThread. Por exemplo:
procedure TfrmPrincipal.FormCreate(Sender: TObject);
begin
TThread(Self).NameThreadForDebugging('main thread');
end;

Com as threads devidamente nomeadas, a janela threads status passa a ficar muito mais clara:



Caso você consiga identificar uma thread pelo id, você pode alterar seu nome para debugging na janela thread status basta clicar com o botão direito do mouse sobre a linha da thread e depois selecionar a opção name thread.
Agora, imagine que você queira depurar uma determinada thread, mas não quer que a execução de outra thread qualquer possa interferir nesse processo. Em uma situação destas você pode parar a execução de uma ou todas as threads. Quando a aplicação tem a sua execução pausada (caindo em um breakpoint ou caso o botão de pause seja clicado), você pode clicar com o botão direito do mouse sobre a thread que deseja pausar a execução e selecionar a opção Freeze, ou pode clicar com o botão direito do mouse sobre a única thread que você deseja que continue executando e se selecionar a opção Freeze All Other Threads.



Veja que estou com o ponteiro de depuração em um breakpoint de uma thread (status Breakpoint) e parei a execução de outra thread (status Frozen). Caso eu passe a depurar a thread (com o F8 ou F7 por exemplo) o status mudaria de Breakpoint para Stepped. Para liberar a execução da thread congelada (Frozen), basta clicar nela e selecionar a opção Thaw.

Por falar em breakpoints, você pode condicionar um breakpoint para que ele funcione somente quando aquele trecho de código seja executado por uma determinada thread. Para realizar essa configuração, clique com o botão direito do mouse sobre o breakpoint e selecione a opção Breakpoint Properties, uma das propriedades é exatamente a thread:



Isso garante que o breakpoint só será acionado, caso a thread corrente seja a thread configurada.

Espero que tenha ajudando um pouco com essas dicas, apesar de threads não serem nenhuma novidade, vejo que muitas vezes é um assunto que não recebe o seu devido valor. Obviamente o assunto não se encerra aqui, até mesmo porque esse estudo recebeu o nome de Threads no Delphi, por onde começar? Sendo assim, isso é só o começo.


Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: Caduzera (edu_carlos@ig.com.br) : Fev 27, 2013 - 06:41
(Informações sobre o membro | Enviar uma mensagem) http://
Muito esclarecedor ... parabéns !!


por: Kline777 (tiago_rod@msn.com) : Fev 28, 2013 - 07:32
(Informações sobre o membro | Enviar uma mensagem) http://http://
Estes artigos foram muito bons. Já me deram muito jeito esta semana ^^ Já estou a usar threads com metodos anonimos


por: carlos_tedex (carlos.tedex@gmail.com) : Mar 04, 2013 - 01:52
(Informações sobre o membro | Enviar uma mensagem) http://http://
Meus parabéns pelo artigo. Agora não posso falar que não conheço TThread.
Só uma pergunta, fiz um teste no Delphi 2010 e percebi que o mesmo não reconheceu o "TThread.CreateAnonymousThread" gostaria de saber a partir de qual versão do Delphi sofreu essa implementação?
Caso você também possa disponibilizar ou me enviar um e-mail com os fontes utilizados neste artigo ficarei grato.


por: jferreira10 (admin@godigitalny.com) : Jul 07, 2015 - 11:24
(Informações sobre o membro | Enviar uma mensagem) http://godigitalny.com.br/
Muito bom o artigo. Parabéns pelo trabalho.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados