Delphi Bluetooth Android TThread e Sleep
Estou terminando um aplicativo onde tenho uma rotina que precisa ficar'' pingando'' o dispositivo para verificar se a distancia do celular não esta fora de alcance do dispositivo Bluetooth.
Eu utilizo um Timer e uma TThread anônima dentro do evento do Timer,mas não sei se foi implementado corretamente.
O aplicativo utiliza um Horizontal Scroll Box com um Memo e alguns GroupBox.
O Timer esta setado para 3 segundos e sempre que ocorre o evnto Timer,a digitação do Memo ou o Scroll Box ficam ''travando'' e quero eliminar isso.
O sleep dentro do Timer é de 1 segundo e não pode ser menor sob o risco de fragmentação dos dados vindo pelo Bluetooth.
segue o esboço da rotina.
Como poderia executar esta rotina em tempos sem interferir na digitação do Memo e o Scroll Box?
Eu utilizo um Timer e uma TThread anônima dentro do evento do Timer,mas não sei se foi implementado corretamente.
O aplicativo utiliza um Horizontal Scroll Box com um Memo e alguns GroupBox.
O Timer esta setado para 3 segundos e sempre que ocorre o evnto Timer,a digitação do Memo ou o Scroll Box ficam ''travando'' e quero eliminar isso.
O sleep dentro do Timer é de 1 segundo e não pode ser menor sob o risco de fragmentação dos dados vindo pelo Bluetooth.
segue o esboço da rotina.
procedure TForm1.Timer1Timer(Sender: TObject); begin TThread.CreateAnonymousThread( procedure begin TThread.Synchronize(TThread.CurrentThread, procedure begin BTMethod.SendData(ID,#$2); Sleep(1000); Application.ProcessMessages; PING:= BTMethod.Receivedata(ID); end); end).Start;
Como poderia executar esta rotina em tempos sem interferir na digitação do Memo e o Scroll Box?
Vtrx
Curtidas 0
Respostas
Emerson Nascimento
18/11/2021
você já tentou retirar à chamada ao método Application.ProcessMessages pra ver o que acontece?
GOSTEI 0
Vtrx
18/11/2021
você já tentou retirar à chamada ao método Application.ProcessMessages pra ver o que acontece?
Comentei //Application.ProcessMessages; e não alterou em nada.
GOSTEI 0
Vtrx
18/11/2021
Achei uma solução vasculhando muito.
Uma observação é que seu utilizar um Application.ProcessMessages depois do Sleep não funciona.
... Blue_ping = class(TThread) private Lp: Integer; protected procedure Execute ; override; end; ... { Blue_ping } procedure Blue_ping.Execute; begin end; ... procedure TForm1.Timer1Timer(Sender: TObject); begin with Blue_ping.Create do FreeOnterminate:=true; end; ...
Uma observação é que seu utilizar um Application.ProcessMessages depois do Sleep não funciona.
... Sleep(1000); // Application.ProcessMessages; ...
GOSTEI 0