Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

sampaiode

Activate x componente timer

Recommended Posts

A dúvida que postarei é interessante, gstaria de ajuda. Tenho um executável em VB5 que possui uma barrinha inferior, que recebe mensagens de uma fila MQ_Series e assim que chega uma nova mensagem, a mesma é exibida. Como funciona hoje:

- a cada segundo, em um timer no projeto, a busca da mensagem é feita.

- se chegou mensagem, exibe na tela, desativa o timer e espera-se o OK do usuario. Assim que der o OK, liga-se o timer novamente.

- se nao tem mais mensagem na fila, continua de um em um segundo tentando buscar. (timer ligado o tempo todo)


Meu problema ocorre justamente quando nao tem mais mensagens e a cada segundo há a busca de uma nova mensagem. Além de deixar o sistema mais lento, o sistema possui algumas telas que realizam tráfego de informações no form_activate. Quando está no meio desse tráfego, o foco muda pro evento do timer e não volta para o form_activate, fazendo com que eu perca o que o activate deveria fazer.


Tirar do activate está fora de questao por enquanto, pensamos em cada activate desabilitar o timer e ligar ao final, e talvez quando chegar a ultima mensagem, aumentar o timer de 1 segundo para mais tempo.


Alguma sugestao?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode tentar criar um serviço em segundo plano usando Threading (https://www.google.com.br/search?q=VB5+threading&oq=VB5+threading&aqs=chrome..69i57j0j69i65l2j0l2.1708j0j7&sourceid=chrome&es_sm=0&ie=UTF-8) assim ambos os processos rodariam simultaneamente, isso implicaria, é claro, em um maior uso de memória RAM no sistema hospedeiro, mas pelo menos seu código funcionaria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendo, estudei um pouco essa questao de multithreading no vb, mas nao entendi muito bem.

 

mas durante o fim de semana, percebi que o problema não era o activate em si, e sim o doevents que ele tinha. Ao liberar o processamento no meio da consulta com o doevents, caia no timer e a partir dahi , por ser 1 segundo, nao retornava mais. No momento, retirei o doevents (pq realmente nao precisava naquele momento), e aumentei o timer de 1 para 10 segundos, após tbm uma limpeza geral no código do componente implementando boas práticas (o mesmo já existia e era meio antigo e feito por outras pessoas).

 

usando threading este componente ainda precisaria de um timer pra ser exibido, certo???

 

ps: o ambiente eh windows 7

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.