Dyego Noé Postado Quarta as 11:42 Postado Quarta as 11:42 Bom dia a todos, Identificado um travamento no TACBrLCB ao utilizar leitor de código de barras pela porta serial O timer interno do componente chama "LeSerial", que utilizava "RecvTerminated(200, ...)" ou "RecvPacket(200)". Em cenários com "Application.ProcessMessages", telas modais ou processamento mais demorado de eventos, essa leitura síncrona podia bloquear a thread principal repetidamente, causando travamento da interface e impedindo outros dispositivos seriais, como balança, de processarem suas mensagens. Foi feito uma alteração configurável e retrocompatível no componente - Inclusão da propriedade "TimeOutLeitura: Integer", com valor padrão "200", usada nas chamadas a "RecvTerminated" e "RecvPacket". - Inclusão da propriedade "BloquearReentrada: Boolean", com valor padrão "False". - Quando "BloquearReentrada = True", o componente ignora uma nova chamada de "LeSerial" enquanto uma leitura anterior ainda está em andamento, evitando reentrada pelo processamento de mensagens. - O comportamento padrão permanece igual ao anterior, pois "TimeOutLeitura" continua em "200" e "BloquearReentrada" inicia como "False". Na aplicação afetada, a configuração utilizada foi: TimeOutLeitura := 0; BloquearReentrada := True; Com TimeOutLeitura = 0, a leitura deixa de aguardar na thread principal; com "BloquearReentrada = True", evita-se uma segunda leitura concorrente durante a execução da primeira. Após a alteração, o leitor serial, a conferência por balança passaram a funcionar normalmente. segue, prints das alterações e a classe alterada. ACBrLCB.pas Dyego Noé | e-mail: [email protected] Analista e Desenvolvedor de Sistemas | Supervisor de Programação Viva Sistemas
Fundadores Daniel Simoes Postado Quarta as 12:08 Fundadores Postado Quarta as 12:08 Obrigado pela contribuição... analisando... Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
Recommended Posts
Crie uma conta ou entre para comentar
Você precisar ser um membro para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora