Aguardar Evento acontecer
Olá,
Eu tenho aqui um componente e ele tem seus eventos.
Só que preciso criar uma função que ao chamar ela, aguarda a execução do evento.
Um exemplo é o readln do idTCPClient
Se coloco
Str:= idTCPClient.Socket.Readln();
ShowMessage(Str);
Ele vai aguardar até que chegue os dados.
É isso que estou querendo fazer criar uma função
Str:= LerDados();
ShowMessage(Str);
Esse LerDados vai aguardar até que o evento aconteça e depois volte para o ciclo normal.
Como posso fazer isso?
Eu tenho aqui um componente e ele tem seus eventos.
Só que preciso criar uma função que ao chamar ela, aguarda a execução do evento.
Um exemplo é o readln do idTCPClient
Se coloco
Str:= idTCPClient.Socket.Readln();
ShowMessage(Str);
Ele vai aguardar até que chegue os dados.
É isso que estou querendo fazer criar uma função
Str:= LerDados();
ShowMessage(Str);
Esse LerDados vai aguardar até que o evento aconteça e depois volte para o ciclo normal.
Como posso fazer isso?
Rudá
Curtidas 0
Respostas
Rudá
13/03/2009
Esqueci de falar que aguardar até no máximo um determinado tempo (Timeout)
LerDados(10000) aguardar até no máximo 10 seg;
LerDados(10000) aguardar até no máximo 10 seg;
GOSTEI 0
Woinch
13/03/2009
Na verdade aquele ShowMessage só irá acontecer depois de executado o LerDados().
Mas entendi o que você quer fazer. Você pode utilizar o comando Application.ProcessMessages para ficar aguardando o tempo que for necessário, exemplo:
Onde a variável ContinuarProcessando deverá ser uma variável privada ou pública que será mudada para False quando o processo deverá ser parado e a variável MSeg indicará em quantos Milesegundos o processo irá parar se a variável ContinuarProcessando não sofrer alterações.
Nunca fiz nada desse tipo antes, inclusive esse comando foi adaptado na hora por mim (não testei). Mas espero que te ajude em algo.
Favor mande um feedback.
Mas entendi o que você quer fazer. Você pode utilizar o comando Application.ProcessMessages para ficar aguardando o tempo que for necessário, exemplo:
function LerDados(MSeg: Cardinal); var Inicio: Cardinal; begin Inicio := GetTickCount; ContinuarProcessando := True; repeat Application.ProcessMessages; until ((GetTickCount -Inicio) >= MSeg) or (ContinuarProcessando); end;
Onde a variável ContinuarProcessando deverá ser uma variável privada ou pública que será mudada para False quando o processo deverá ser parado e a variável MSeg indicará em quantos Milesegundos o processo irá parar se a variável ContinuarProcessando não sofrer alterações.
Nunca fiz nada desse tipo antes, inclusive esse comando foi adaptado na hora por mim (não testei). Mas espero que te ajude em algo.
Favor mande um feedback.
GOSTEI 0
Rudá
13/03/2009
Perfeito amigo.
Funcionou como eu queria.
Obrigado.
Funcionou como eu queria.
Obrigado.
GOSTEI 0