Timers nao param

Programação Delphi e Pascal

Moderadores: 51, guest2003

Timers nao param

Mensagempor icaro51 » 27 Jul 2007 19:34

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
icaro51
Byte
 
Mensagens: 119
Registrado em: 09 Dez 2006 21:56

Mensagempor Doglao » 01 Ago 2007 15:34

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
null
Doglao
Byte
 
Mensagens: 101
Registrado em: 12 Mai 2007 12:13
Localização: null

Mensagempor Wagner de Queiroz » 01 Ago 2007 21:01

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 ...
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Mensagempor fabim » 02 Ago 2007 07:56

huhuhuhuhuhhahahehehehe...
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Wagner de Queiroz » 03 Ago 2007 01:12

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 ....
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Mensagempor icaro51 » 03 Ago 2007 08:43

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.
icaro51
Byte
 
Mensagens: 119
Registrado em: 09 Dez 2006 21:56

Mensagempor Wagner de Queiroz » 04 Ago 2007 23:15

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ô !
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP


Voltar para Delphi e Pascal

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x