Problema con timer
Hola, os cuento. Tengo un timer que cada 5 seg lanza un procedimiento. Resulta que este procedimiento accede a remoto y se puede quedar colgado eternamente. Para solucionar esto me he creado otro timer que se lance cada 30 seg por si el otro se ha quedado colgado, comprobando una variable global y as铆 poder lanzar el procedimiento que da problemas. Para probarlo he puesto un While(true) wend justo antes de la llamada al procedimiento para simular que se ha quedado colgado. El problema es que nunca se activa el timer de comprobaci贸n y el prgrama se queda en el while y al final se bloquea (No responde). Alguna ayudilla??? Os dejo el c贸digo de los dos timer:
Private Sub tmrMonitorizacion_Timer()
If GBL_RUNNING And GBL_INICIALIZADO Then
GBL_ERROR_LECTURA = True
Call bloqueo(GBL_WRI_TEMP, GBL_RD_TEMP, 2)
While(true)
Wend
Call AppExecRemoteRead
Call desbloqueo(GBL_WRI_TEMP)
GBL_ERROR_LECTURA = False
'Call tmrControlLectura_Timer
End If
End Sub
Private Sub tmrControlLectura_Timer()
If GBL_ERROR_LECTURA = False Then
Call bloqueo(GBL_RD_TEMP, GBL_WRI_TEMP, 1)
Call AppExecLocalRead
Call desbloqueo(GBL_RD_TEMP)
Else
Call desbloqueo(GBL_WRI_TEMP)
Call tmrMonitorizacion_Timer
End If
End Sub
Private Sub tmrMonitorizacion_Timer()
If GBL_RUNNING And GBL_INICIALIZADO Then
GBL_ERROR_LECTURA = True
Call bloqueo(GBL_WRI_TEMP, GBL_RD_TEMP, 2)
While(true)
Wend
Call AppExecRemoteRead
Call desbloqueo(GBL_WRI_TEMP)
GBL_ERROR_LECTURA = False
'Call tmrControlLectura_Timer
End If
End Sub
Private Sub tmrControlLectura_Timer()
If GBL_ERROR_LECTURA = False Then
Call bloqueo(GBL_RD_TEMP, GBL_WRI_TEMP, 1)
Call AppExecLocalRead
Call desbloqueo(GBL_RD_TEMP)
Else
Call desbloqueo(GBL_WRI_TEMP)
Call tmrMonitorizacion_Timer
End If
End Sub
Lo que sucede que visual basic se queda ejecutando ese bucle infinito y no ejecuta el resto del codigo,
POR EJEMPLO SI A ESTE TIMER LE PONES 1 SEGUNDO DE INTERVALO
Private Sub Timer1_Timer()
Text1.Text = Text1.Text + 1
MsgBox Text1.Text
End Sub
SE EJECUTA Y TE QUEDAS 20 SEGUNDOS ESPERANDO, CUANDO PRECIONES CIERRES EL MSGBOX NO APARECERA 20 EN EL TEXTBOX APARECERA 1 Y VOLVERA ASUMAR AL SIGUIETE SEGUNDO.
Cuando tengas siclos muy grandes utiliza el doevents para ejecutar los otros hilos de la aplicacion, pero deben ir en el procedimiento no en el timer
salu2
POR EJEMPLO SI A ESTE TIMER LE PONES 1 SEGUNDO DE INTERVALO
Private Sub Timer1_Timer()
Text1.Text = Text1.Text + 1
MsgBox Text1.Text
End Sub
SE EJECUTA Y TE QUEDAS 20 SEGUNDOS ESPERANDO, CUANDO PRECIONES CIERRES EL MSGBOX NO APARECERA 20 EN EL TEXTBOX APARECERA 1 Y VOLVERA ASUMAR AL SIGUIETE SEGUNDO.
Cuando tengas siclos muy grandes utiliza el doevents para ejecutar los otros hilos de la aplicacion, pero deben ir en el procedimiento no en el timer
salu2
