GARANTIR DESCONTO

Fórum ProcessMessages #266076

20/01/2005

0

Gostaria de saber + sobre essa Função do Delphi como por exemplo pra que que serve e qndo eu uso esse comando Application.ProcessMessages






grato desde jah, aguardo respostas obrigado a todos que postarem.


Crashovewrite

Crashovewrite

Responder

Post mais votado

21/01/2005

Colega,

Tenho um parecer contrário ao que foi exposto. No help, temos a seguinte citação:

Interrupts the execution of an application so that it can process the message queue.


Ou seja, interrompe a execução de uma aplicação para que ela consiga processar a fila de mensagens. Em seguida, ainda no help, diz que ao chamar ProcessMessages a fila é processada até [b:d7e50bb691]esvaziar[/b:d7e50bb691].

Chamando o método dentro de um laço (while, for, etc) não conseguiremos perceber perda de performance nem com o auxílio de um cronometro, exceto, se dentro do loop existir alguma rotina para exibir dados em tela que obrigue repintar a mesma, ou ainda, se o usuário ficar movendo o formulário de lugar.

Na pratica, utilizem o código abaixo para testar. É importante notar que, vários testes podem variar em muito com ou sem o uso do método.

procedure TForm1.Button1Click(Sender: TObject);
var I: Int64;
    Arquivo: TextFile;
    TempDir: String;
begin
  sb.Panels[1].Text := TimeToStr(Time);

  TempDir  := ´C:\TEMP´;

  ForceDirectories(TempDir);

  AssignFile(Arquivo,TempDir+´\TempFile.txt´);
  ReWrite(Arquivo);

  I := 0;
  while I <= 1000000 do
  begin
    I := I + 1;
    WriteLn(Arquivo, StringOfChar(Chr(65),132));
    Application.ProcessMessages; // Comente esta linha para testes
  end;

  CloseFile(Arquivo);

  sb.Panels[3].Text := TimeToStr(Time);
  ShowMessage(´Ok´);
end;


Este é um exemplo simples, porém, podemos perceber que o processamento das mensagens, normalmente, sempre será mais rápido que outras atividades executadas pela aplicação.


Aroldo Zanela

Aroldo Zanela
Responder

Gostei + 4

Mais Posts

20/01/2005

Isabelct

O Application.ProcessMessages, como o próprio nome já diz, serve para processar as mensagens pendentes do seu programa.

Em outras palavras, ele serve para executar coisas que deixaram de ser executadas porque tem uma outra tarefa mais ´pesada´ sendo executada...

Uma situação prática: Você está copiando dados de um banco de dados para outro. Isso é uma tarefa ´pesada´, que exige bastante recursos do seu computador. Ao executá-lo, ele ficará com uma aparência de ´pendurado´, não redesenhando a tela e tal. Então, você pode executar o Application.ProcessMessages, para redesenhr a sua tela.

Este foi só um exemplo, mas no geral é para coisas assim que ele é utilizado.

Apenas um aviso: Use com cuidado este comando, e não o utilize dentro de laços de repetição! O seu custo (no sentido de tempo) é muito alto e muitas vezes não compensa, pois causa perda de performance.


Responder

Gostei + 3

20/01/2005

Paulo_amorim

Olá

e não o utilize dentro de laços de repetição

Entretanto às vezes é necessário...
Uma situação:

Um Laço muito extenso, com vários comandos e que faz várias transações no banco, por exemplo, pode possuir um botão CANCELAR. Se a pessoa clicar nesse botão, o processo eh parado, e para isso vc precisa do ProcessMessages

Mas, como ela disse, muitas vezes não compensa pelo desempenho e tempo. Vale avaliar os fatos

Até+


Responder

Gostei + 2

20/01/2005

Isabelct

Entretanto às vezes é necessário...


Com certeza às vezes é necessário, mas é preciso saber ponderar... Por exemplo, se o ProcessMessages precisa ficar dentro de um laço de repetição, ele não precisa ser executado em toda iteração, pode-se colocar um contador, e a cada 100 iterações (ou um número que fique bom para o sistema) executá-lo.

  if Contador mod 100 = 0 then
    Application.ProcessMessages;
  Inc(Contador);


Mas ao utilizar o Application.ProcessMessages, o bom-senso é sempre a melhor companhia :-)


Responder

Gostei + 2

21/01/2005

Crashovewrite

Galera brigadaum pela ´aula´ sobre a função Application.ProcessMessages aprendi muito com vcx Obrigado a todos que rexpoderam a minha pergunta, estou muito feliz ao saber que existe pessoas como vcs que ajudam aos necessitados OBRIGADO MESMO GALERA.



Um abraço a todos os cuecas e um beijo para a isabelct.


Responder

Gostei + 1

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar