Ir ao conteúdo
  • Cadastre-se

Multi processamento


No Suffer

Posts recomendados

  • 4 semanas depois...

Aqui vai uma dica....

Pode fazer que funciona muito bem, já tenho alguns aplicativos que só consegui resolver alguns problemas usando multiprocessamento...

706 - Construindo Threads com Delphi

Hoje em dia, os programas de computador devem ser cada vez mais rápidos de serem executados e que possam realizar várias tarefas ao mesmo tempo, para que o usuário possa realizar outras operações, ao mesmo tempo que as executa.

Mas para que isso aconteça, nós desenvolvedores de software devemos escrever nossos programas baseados nesta tecnologia de muitas linhas de execução, ou simplesmente "Threads".

Um thread pode realizar vários operações residindo num mesmo espaço de endereço na memória, quem realmente controla esses threads é o sistema operacional, que se baseia em suas prioridades. Essas proridades são setadas por nós quando desenvolvemos um thread. A boa nova, é que o Delphi é compatível com esta tecnologia e fico triste quando vejo muitas pessoas que ainda se empolgam muito pelo fato do Delphi ser visual e fácil de usar, e esquecem de seu enorme potencial.

Eu resolvi mostrar como se faz um thread, pois, é de suma responsabilidade de um programador que uma aplicação fique estável, e não devemos, num projeto grande, nos basear somente na arquitetura de Orientação a Objeto e IDE aprimorado do Delphi para Desenvolver software.

Para se criar um thread em Delphi, devemos criar uma classe que derive da classe "TThread", que está escrita na biblioteca "Classes". A classe TThread é uma classe abstrata, portanto não podemos utilizá-la diretamente, pois devemos implementar um de seus métodos. Esse método se chama "Execute", ele é responsável por todo o funcionamento do seu Thread. Junto com esse método, temos o outro método "Synchronize" que serve para acessar partes da VCL sem que percamos o controle da aplicação, ou seja, o Windows ainda possa controlar nossos objetos enviando mensagens para eles. Esse método tem um único argumento que é do tipo procedimento, ou seja, temos que definir procedimentos em nossa classe que controlem a VCL, e quando quisermos chamá-los, devemos passá-los como argumento do método Synchronize. O nosso thread fará o seguinte: Ele irá contar quantas linhas um arquivo texto possui, e a cada linha que ele ler, irá incrementar uma label que estará num form. A classe ficará assim:

--------------------------------------------------------------------------------

type

 TContador = class(TThread)

 private

 FNomeArq: string;

 FNLinhas: Longint;

 protected

 procedure Execute; override; // Método anulado

 procedure IncLabel; virtual;

 public

 constructor Create(const Arquivo: string);

end;

implementation

procedure TContador.Execute;

var

 Arq: TextFile;

 S: string;

begin

 try

 AssignFile(Arq, FNomeArq);

 Reset(Arq);

 while (not SeekEof(Arq)) do

 begin

 ReadLn(Arq, S);

 FNLinhas := FNLinhas + 1;

 Synchronize(IncLabel); // Aqui é chamado o contador...

 end;

 finally

 CloseFile(Arq);

 end;

end;

procedure TContador.IncLabel;

begin

 Form1.Label1.Caption := IntToStr(FNLinhas);

 { o Contador será executado em modo protegido por uma Seção Critica do Windows}

end;

constructor TContador.Create(const Arquivo: string);

begin

 inherited Create(True); { Chama o contrutor herdado. Ele irá temporariamente colocar o thread em estado de espera para depois executá-lo. }

 FNomeArq := Arquivo;

 FreeOnTerminate := True; // Libera o objeto após terminar.

 Priority := TpLower; { Configura sua prioridade na lista de processos do Sistema operacional. }

 Resume; // Inicia o Thread.

end;

--------------------------------------------------------------------------------

para construir este exemplo, inicie uma nova aplicação, coloque um "Edit" e uma "Label" no Form. Inclua um botão também que quando pressionado irá contar as linhas do arquivo que estiver no Edit. Escreva a classe acima numa unit separada e no código do botão faça assim:

procedure TForm1.Button1Click(Sender: TObject);

var

 Cont: TContador;

begin

 Cont := TContador.Create(Edit1.Text);

end;

Com esse código simples, podemos calcular quantas linhas estiverem no arquivo do Edit. Para testar digite no Edit o arquivo "C:\Frunlog.txt".

Espero que vocês gostem da surpresa, e dada a facilidade enorme de se criar um thread em Delphi, aconselho a vocês a utilizarem threads mais frequentemente nos seus aplicativos. Mas não em excesso e sejam cautelosos configurando as prioridades dos Threads.

{Dica retirada do Site Delphi Journal

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...