Delay

Delphi

14/05/2004

E ai pessoal td bem??
Olha queria saber com faço um delay, tenho o código mas naum achei um complemento pra fazer o quero, que seria enviar um protocolo em cada 50 milésimos de segundos.
O Código que consegui segue abaixo:

procedure delay(MSec: cardinal);
var
start: cardinal;
begin
Start:=GetTickCount;
repeat
Application.processMessages;
until (GetTickCount - Start)>=Msec;
end;



===--Exemplo de uso--===
delay(1000);{Aguarda 1 segundo}
delay(5000);{Aguarda 5 segundos}
delay(60000);{Aguarda 60 segundos = 1 minuto}

Mas meu protocolo não está sendo enviando como eu quero, ou melhor, envia o primeiro antes do código do delay e não envia mais nada.
Deve ser por causa da linha ´Application.processMessages;´, mas naum sei por qual substituir pra enviar meu protocolo via porta serial.

Agradeço a atenção


Salvati

Salvati

Curtidas 0

Respostas

Lucas Silva

Lucas Silva

14/05/2004

Tenta usar o comando [b:ebdb5560eb]Sleep[/b:ebdb5560eb]


GOSTEI 0
Salvati

Salvati

14/05/2004

E ai amigo,
bem que eu tentei fazer com o sleep, mas depois do envio do primeiro protocolo meu micro vai receber um protocolo do hardware como resposta, ai depois o micro envia outro protocolo e ai o outro hardware responde e assim por diante.
E com os meus testes vi que durante a execução do sleep ele deixa de receber informação...

Mas será que naum tem outra saída???

Obrigado pela atenção


GOSTEI 0
Salvati

Salvati

14/05/2004

e ai qual a diferença entre delay e sleep???
e ai pessoal alguém pode me ajudar ai??


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

14/05/2004

a diferença é que delay vc criou, e sleep é uma função do delphi.

outra coisa: talvez seu problema se resolva com um Timer.
algo como:
//altere a propriedade Interval para o tempo desejado
procedure TForm.Timer1OnTimer(Sender: TObject);
begin
      Timer1.Enabled := False; // para não ´encavalar´ os processos

      {procedure ou rotina para ENVIAR protocolo}

      Sleep(1000); // aguarda um segundo para depois tentar receber o protocolo resposta

      {procedure ou rotina para RECEBER protocolo}

      Timer1.Enabled := True; // religa o timer
end;


uma outra forma é você utilizar Threads para esse processo.


GOSTEI 0
POSTAR