Fala galera! Irei iniciar 2014 com um post sobre threads. Mas o que são threads?
Segundo a Wikipedia, threads são “uma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas concorrentemente”. Legal, mas no que uma thread pode me ajudar?
Usos
Threads geralmente são utilizadas para executar uma tarefa que possa demandar muito tempo, podemos utilizar como exemplo o backup de uma base de dados.
A vantagem de se utilizar uma thread é que ela executa enquanto você pode utilizar outras funções da sua aplicação, diferente das vias normais onde você teria de esperar o seu programa executar toda a ação.
Criando a Thread
Para criar uma thread é bem simples, após criar um novo projeto, você deve utilizar o menu New->Other->Delphi Objects->Thread Object.
Será solicitado um nome para a thread, podemos utilizar TExemploThread.
Após isso será criado o “esqueleto” da nossa thread.
Implementando o exemplo
A ação da nossa thread ficará dentro do método Execute, iremos fazer uma contagem de 1 até 10000000 (que poderia travar seu programa se programado de forma “normal”).
procedure TExemploThread.Execute; var i: integer; begin for i := 0 to 1000000000 do begin self.FCount := i; end; end;
A variável FCount está declarada na seção private da classe TExemploThread:
type TExemploThread = class(TThread) private { Private declarations } FCount: integer; procedure atualizaPanel; protected procedure Execute; override; end;
Até aí tudo bem, nossa thread está executando o código, mas e seu quiser saber como está a contagem?
Diferente das classes, onde podemos utilizar um getter pra saber o valor de uma determinada variável, no TThreadObject existe o método Synchronize.
Com o método Synchronize, passamos como parâmetro uma procedure que pode, por exemplo, exibir num TLabel a nossa contagem.
Para exemplificar, criei a procedure atualizaPanel;
procedure TExemploThread.atualizaPanel; begin form1.Panel1.Caption := 'Total: ' + intToStr(self.FCount); end;
Por fim, a chamamos dentro do Execute após a variável FCount for atualizada.
procedure TExemploThread.Execute; var i: integer; begin for i := 0 to 1000000000 do begin self.FCount := i; Synchronize(self.atualizaPanel); end; end;
Instanciando a thread na aplicação.
Por fim iremos chamar a thread na aplicação e ver o resultado! Para exemplificar, criei o seguinte formulário:
No OnClick do botão criamos a instância da Thread e a executamos.
procedure TForm1.Button1Click(Sender: TObject); var thread: TExemploThread; begin thread := TExemploThread.Create(false); thread.Resume; end;
Basta rodar o projeto e testar. Está pronta sua primeira thread!
Espero que este artigo básico sirva de ponto de partida para que você se aprofunde no uso das threads.
Abraços e até a próxima!
Criando threads com Delphi.
Valeu Jovem …Me ajudou bastante!
Amigo vc criou ele como false. Ou seja nao suspenso então o resume logo em seguida é desnecessario. Abraços
Melhor exemplo que achei. Simples e eficiente! Valeu Fernando! Deus te abençoe!
// Faço assim…
procedure TfrmThread.btnIniciarClick(Sender: TObject);
var
Thread : TThread;
begin
Thread := TThread.CreateAnonymousThread(MinhaProcedure);
Thread.Start;
end;
Após criar essa thread depois que ela faz o que tem que fazer, ela morre sozinha ou tenho que destruir ela ? estou visando desempenho da aplicação