Criando threads com Delphi


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.

delphi_thread_01

Será solicitado um nome para a thread, podemos utilizar TExemploThread.

delphi_thread_03
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:

delphi_thread_02

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.

5 comentários sobre “Criando threads com Delphi

  1. 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

Deixe um comentário

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.