¿Cómo retraso la ejecución del código en Visual Basic (VB6)?
Pregunta
Tengo un proceso de larga duración en VB6 que quiero finalizar antes de ejecutar la siguiente línea de código.¿Cómo puedo hacer eso?¿Función incorporada?¿Puedo controlar cuánto tiempo esperar?
Ejemplo trivial:
Call ExternalLongRunningProcess
Call DoOtherStuff
¿Cómo puedo retrasar 'DoOtherStuff'?
Solución
VB.Net:Yo usaría un Espera uno identificador de eventos.
VB 6.0:He visto un bucle DoEvents.
Do
If isSomeCheckCondition() Then Exit Do
DoEvents
Loop
Finalmente, podrías simplemente dormir:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sleep 10000
Otros consejos
Mientras que Nescio respuesta (DoEvents) funcionará, hará que su aplicación utilice el 100% de una CPU.La suspensión hará que la interfaz de usuario no responda.Lo que necesitas es una combinación de los dos, y la combinación mágica que parece funcionar mejor es:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
While IsStillWaitingForSomething()
DoEvents
DoEvents
Sleep(55)
Wend
¿Por qué dos DoEvents y uno duermen durante 55 milisegundos?La suspensión de 55 milisegundos es la porción más pequeña que VB6 puede manejar, y a veces se requiere el uso de dos DoEvents en casos en los que se necesita una gran capacidad de respuesta (no por la API, pero si su aplicación responde a eventos externos, SendMessage, Interupts, etc. ).
Divide tu código en 2 procesos.Ejecute el primero, luego ejecute su "proceso de ejecución larga", luego ejecute el segundo proceso.
Ejecute su proceso de larga duración en medio de su proceso actual y espere a que se complete.
Desearía que pudieras agregar .net framework system.dll o lo que sea a las referencias de tu proyecto para poder hacer esto:
Dim ALongTime As Integer = 2000
System.Threading.Thread.Sleep(ALongTime)
...cada vez.Tengo VB6 y VB.net 2008 en mi máquina, y siempre me resulta difícil cambiar entre los diferentes IDE.
System.Threading.Thread.Sleep(500)