Criar Thread no Delphi
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLy1YhCgD2ZFD8se2YkvLLyST91ED0gtsDYcm18vW4Ji-negcCezRnFygFxPMhOBrm-Xjmy6bh3aABpQufDD6llB0wZrnEaSouf0IDMeDGt4qMZUB0WtGscy0iSLOkMfMSgWp6AmpHaDg/s320/20190107_050136_shutterstock_1012975243.jpg)
Em versões mais antigas necessariamente tínhamos que ter uma criação de uma Thread, muitas vezes com a necessidade de criação de uma nova Unit.
Exemplo:
Em novas versões (XE) temos o método CreateAnonymousThread nativo não necessariamente precisando criar. E ainda o FreeOnTerminate por default é True com isto não precisa fazer a destruição da instancia no fim do processo.
Então vamos para o exemplo:
Exemplo: Download do exemplo
Exemplo:
TMinhaThread = class(TThread)
private
protected
procedure Execute; override;
public
constructor Create();
end;
constructor TMinhaThread.Create();
begin
inherited Create(True);
FreeOnTerminate := True; { Libera da memoria }.
Priority := TpLower; Prioridade na lista }
Resume; { Inicia }.
end;
procedure TMinhaThread.Execute;
begin
inherited;
{Processo a ser executado}
end;
{ Criação da Thread em outra tela }
procedure TSistema.Button1Click(Sender: TObject);
var
lThread : TMinhaThread;
begin
lThread := TMinhaThread.Create;
lThread.Execute;
end;
Em novas versões (XE) temos o método CreateAnonymousThread nativo não necessariamente precisando criar. E ainda o FreeOnTerminate por default é True com isto não precisa fazer a destruição da instancia no fim do processo.
Então vamos para o exemplo:
Vamos colocar dois botões para em uma fazer o exemplo com a criação da TThread e o outro sem a necessidade de criação, lembrando de de ambos os modos não se precisa fazer a destruição do método
Em nosso exemplo vamos compactar um arquivo selecionado, abaixo um exemplo simples de compactação agora vamos na criação das TThread
procedure TFSistema.CompactarArquivos;
var
lZipFile: TZipFile;
begin
lZipFile := TZipFile.Create;
try
lZipFile.Open(TPath.Combine(GetCurrentDir, 'ArquivoNovo.zip'), zmWrite);
lZipFile.Add(OpenDialog.FileName);
MessageDlg('Compactação concluída "ArquivoNovo"!', mtInformation, [mbOK], 0);
finally
lZipFile.Free;
end;
end;
Primeiro exemplo: Note que em poucas linhas fazemos a criação e jogamos o CompactarArquivos sem dificuldade para dentro da TThread.
procedure TFSistema.BtnCompactarCriacaoClick(Sender: TObject);
var
lThread : TThread;
begin
lThread := TThread.CreateAnonymousThread(CompactarArquivos);
lThread.Start();
end;
Segundo exemplo: Neste exemplo em uma unica linha fizemos a Thread sem a necessidade de criação da variável e novamente sem precisar liberar da memoria.
procedure TFSistema.BtnCompactarCriacaoClick(Sender: TObject);
begin
TThread.CreateAnonymousThread(CompactarArquivos).Start;
end;
Exemplo: Download do exemplo
0 comentários:
Postar um comentário