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