Escribo para plantear una pequeña duda que me tiene preocupado: ¿Hay forma de reiniciar un timer en vb6?
Estoy tratando de recibir datos por el puerto COM en formato RS232. La PC debe recibir un bloque de 30 caracteres para procesarlo, pero tengo la propiedad rthreshold a 1 para que se produzca un evento OnComm cada vez que se reciba un caracter.
El objetivo es que cada vez que llegue un caracter se reinicie un timer para evitar que éste último produzca un evento Timer(). Si se produce el evento Timer() quiere decir que el caracter ha tardado en llegar y suponer entonces que ha ocurrido un problema con la comunicación.
Así, por ejemplo, si después del cuarto caracter el quinto no llega en un determinado tiempo, el sistema reiniciará su lógica de recepción y el siguiente caracter que llegue será considerado el primero de una nueva cadena.
De manera burda, lo tengo así:
Código:
Dim contacaracter as integer
Dim s as string
private sub Comm1_OnComm()
if comm1.commevent=comevreceive then 'Si se ha recibido un caracter.
if contacaracter = 0 then ' y si es el primero en recibirse
timer1.enabled = true ' se habilita el timer.
else
timer1.enabled = false ' Aquí trato de reiniciar el timer apagándolo
timer1.enabled = true ' y luego encendiéndolo, pero al parecer no
' funciona.
endif
s = s & comm1.input
'Aquí proceso el caracter recibido.
' Cuando se reciban tdos los caracteres se inhabilita el timer.
endif
end sub
private sub timer1_Timer()
contacaracter=0 ' El siguiente caracter que llegue será considerado el primero.
s="" ' Vacía la cadena de recepción.
timer1.enabled=false
end sub
Cuando apago el timer (timer1.enabled=false) al parecer sólo lo detengo, pero no lo hago regresar a su valor inicial de conteo.
Si alguien pudiera ayudarme, muchísimas gracias.