¡Problemas con Timer y Doevents en VB!
El modo de suspensión es una espera suspendida. El sistema puede implementar una espera de menos de un ciclo de reloj (generalmente 16 ms) a través de un bucle, por lo que el uso de la CPU debe ser muy alto. Además, si duerme 1, el sistema operativo es imposible alcanzar 1 m con precisión, por lo que su código Sleep 1 en realidad tiene que esperar unos milisegundos antes de responder (porque 1 ms es más pequeño que un ciclo de programación de Windows)
La solución es usar la API SetTimer
Agregue un botón al formulario y agregue código:
Private Sub Command1_Click()
TimerId = SetTimer(0, 0, 1000, AddressOf TimerProc)
End Sub
Agregar un módulo y agregar código
Función de declaración pública SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse mientras, ByVal lpTimerFunc mientras) mientras
Función de declaración pública KillTimer Lib "user32" (ByVal hwnd mientras, ByVal nIDEvent mientras) mientras
TimerId público como Long
Sub TimerProc público(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
KillTimer 0, TimerId
Form1.Print "Time To "
End Sub
Cabe señalar que cualquier valor de configuración del temporizador en la capa de usuario será inexacto si es inferior a 15 ms