Página 1 de 1

Timers nao param

MensagemEnviado: 27 Jul 2007 19:34
por icaro51
Ok, so para dar uma agitada nessa parte do forum, e sanar minha duvida (claro)
Fiz um programinha em delphi que de tempos em tempos ele envia dados para todos os PIC que eu tenho ligados a essa serial para chegar seus estatos, ate ai tudo funcionando blz.
Eu tenho esse timer que me diz quando eu devo comecar a fazer as minhas checagem e ele funciona legal, o problema e que ele funciona ate legal demais e quando eu tento desativar ele... ele continua.
Uso o comando:
timer1.enabled:=false;
Em teoria ele deveria parar de chamar a funcao que ele chama quando o clock estoura, mas nao ele continua chamando como se timer1.enabled estivese como true.
Alguem ja teve esse tipo de problema?
Desde ja agradeco,
Icaro

MensagemEnviado: 01 Ago 2007 15:34
por Doglao
Ola!
coloque com debug e quando chegar na linha que desabilita o timer, vai passo a passo pra ver se nao desvia para algum comando que habilita, ou poste o codigo pra gente ver, e tambem voce pode isolar o codigo fazendo um projeto novo somente com as funcoes de timer e ver como se comporta.
abcs

MensagemEnviado: 01 Ago 2007 21:01
por Wagner de Queiroz
Seu erro deve ser um montao de comando dentro de TTimer1

pois quando o timer termina de enviar os dados, ja deve ter ocorrido outra chamada a ele. Isso é um erro comum !

Isole a falha facilmente

Procedure Formulario01.Ontimer(....);
begin
memo1.lines.add('Chamada do timer em '+TimeToStr(now))
EnviaDadosProsPICS;
end;


assim vc fica de olho no que ta rolando. A rotina do TimerOntimer deve ser sempre pequena, chame de lá uma funcao que chame as outras como no caso acima.

Pelo menos se voce desabilitar o timer, ele desabilita mesmo, se tiver ainda coisa pra fazer ele termina o que tava fazendo.

Pois se tiver um monte de comando, o timer fica atívo até terminar, só que nao termina, pq vira um circulo vicioso.


Tenho quase certeza que seu problema deve ser esse.

Se eu estiver errado me perdoe. Creio que estou certo pq ja sofri do mesmo mal.

Como dizia o Refrão da música do Cazuza :

"... O Timer nao para, nao para não! Não para ..." 8)

Isso pra nao falar de um certo acidente aereo ...

MensagemEnviado: 02 Ago 2007 07:56
por fabim
huhuhuhuhuhhahahehehehe...

MensagemEnviado: 03 Ago 2007 01:12
por Wagner de Queiroz
Como dizia o BOZO,

... Sempre rir, sempre rir....

... Eu que sou um palhaço e vivo sempre assim ...


É isso ai ! ... O timer nao para ! Não para nãããão ....

MensagemEnviado: 03 Ago 2007 08:43
por icaro51
Realmente a rotina dentro do timer e um tanto quanto grande, eu estava desabilitando o timer quando eu entrava na rotina e habilitando outra vez quando eu terminava, porque o tempo dentro dela pode variar bastante dependendo da quantidade de informacoes.
Vou tentar fazer assim, chamar outra rotina de dentro do timer e desabilitar e habilitar o timer de dentro dessa outra, posto os resultados, espero que seja isso porque ja estou ficando louco com isso.

MensagemEnviado: 04 Ago 2007 23:15
por Wagner de Queiroz
Tá vendo ! Tá vendo ! Peroba Sabe !

Dica: CUIDADO com esse negocio de ficar habilitando ou desabilitando o timer.

Na Boa, Ja fiz isso uma vez e me arrependi.

O que voce pode fazer é declarar uma variavel global no seu programa chamado timerchamado com valor booleano.


Entrou na rotina do timer, verifique se a variavel é verdadeira, Se for pule a rotina de timer e encerre o procedimento, se nao for, sete a variavel como verdadeiro e chame as rotinas que voce iria usar.


procedure Timer1Ontimer(...);
begin
if not(timerChamado) then
begin
MinhaRotina1
MinhaRotina2
end;
end;


Bão dimais da conta Sô !