Retardo en Visual Basic.

javier_espitia

Lanero Regular
14 Sep 2004
10
Saludo a todos los Laneros:

En C++ Builder existen instrucciones para hacer un retardo en el programa, a saber, Delay() y Sleep(). Entre los paréntesis se escribe el número de milisegundos que se quiere retardar.
Alguno de ustedes sabe cómo hacer lo mismo en Visual Basic 6?.

Gracias a los que respondan.

Javierl.
 
En realidad para lo que estoy haciendo un Timer no me sirve, necesito dentro de un procedimiento realizar un retardo. "Timer" realiza una determinada acción cada determindao tiempo y por más que lo intenté no pude encajarlo con lo que necesito.

Lo que hice fué lo siguiente:
Para realizar el retardo llamaba una rutina que la llamé "retardo", y esta la definí de la siguiente manera:

sub retardo()
i = 0
while i < 20000
i = i + 1
wend

Pero me parece como programación de bajo nivel, eso lo hice una vez en assembler.
Si alguno tiene alguna sugerencia me cuenta. Gracias
 
Sé de un API llamada Sleep cuya declaración es:

Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)


Podrías probar pero creo que tambien la podrías implementar :
'lngCentTime es el número de centésimas de segundos va a esperar
Private Sub Delay(lngCentSeg As Long)
Dim TimeEnd As Single


TimeEnd = Timer + lngCentTime / 100

Do While TimeEnd > Timer
DoEvents
Loop
End Sub
 
Ojo con esos DoEvents dentro de loops, que pueden llenar la pila (stack) y reventar el programa.
 
No pude implementar el programa con la librería kernel32
pero hice una pequeña rutina que le medí el tiempo que se demoraba el programa ejecutándola: es la siguiente:, M es el número de milésimas que quiero que se demore el programa "parado".

Public Sub Retardo(M As Long)
For j = 1 To M
k = 0
While k < 6100
k = k + 1
Wend
Next j
End Sub

Espero sugerencias
 
javier_espitia dijo:
En realidad para lo que estoy haciendo un Timer no me sirve, necesito dentro de un procedimiento realizar un retardo. "Timer" realiza una determinada acción cada determindao tiempo y por más que lo intenté no pude encajarlo con lo que necesito.

porque no utiliza el timer, no vayan a criticar mi programa, ni mi sintaxis pues yo no estudio nada que tenga que ver con sistemas y hace rato no le meto la mano al VB, pero se me ocurre algo asi:

Código:
/Donde necesite el Delay
variable=1  /variable como global
Timer1.enable=1  /Creo que se habilita asi
while i=1
 doevents
wend 
Timer1.enable=0


/dentro del timer que previamente ha configurado el delay que quiera
variable=0

Pues es lo primero que se me ocurrio, como les dije hace tiempos que no manejo VB.

C.F.
 
depende de lo que se encesite tambien... el Sleep() trunca el programita, lo para por completo, un timer crea un hilo (Thread en java) que realiza una serie de cosas en cierto intervalo
 
**Pues esta es tu solucion:
**ejemplo de llamada
'llama la función retardo y espera 0.5 segundos
DELAY (0.5)
'llama la función retardo y espera 5 segundos
DELAY (5)

** Agrega este procedimiento a tu programa y listo, ademas mientras espera
el tiempo necesario permite otros eventos (no bloquea tu programa)

Public Sub DELAY(VALOR As Double)
Dim TiempoPausa, INICIO, Final, TiempoTotal
TiempoPausa = VALOR ' Asigna hora de inicio.
INICIO = Timer ' Establece la hora de inicio.
Do While Timer < INICIO + TiempoPausa
DoEvents ' Cambia a otros procesos.
Loop
Final = Time ' Asigna hora de finalización. (opcional la puedes quitar)
TiempoTotal = Final - INICIO ' Calcula tiempo total. (opcional la puedes quitar)
End Sub


SALUDOS DESDE CD. TAMPICO, MEXICO
 
Es Que Usted Puede Tarle Un Timepo Que Tarde Y Lo Puede Detener En La Propiedad Interval=0, Cuando Usted Le Coloca Un Numero Mayor Que Cero El Nuevamente Sigue Con La Rutina
 
No podés hacer que el timer haga timer1.enable = false con el intervalo de tiempo que necesites?

O sea, en las propiedades seteas el intervalo que nesecites y ponés eso en el código, eso espera los milisegundos que necesitás y apaga el timer.

No se, se me ocurrió.
 
Lo mejor que puedes hacer es usar el control timer como te han dicho, eso del while y el sleep, wait no es recomendable para entornos multitarea como Windows.
 
solución en visual del sleep

lo que debes hacer es agragar un modulo y ponelr esto:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

y luego en tu form simplemente usas tu sleep 3000
o por el tiempo que necesites :p
 
retardo

montell27 dijo:
lo que debes hacer es agragar un modulo y ponelr esto:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

y luego en tu form simplemente usas tu sleep 3000
o por el tiempo que necesites :p

El tema con el sleep es que el programa se durme, bloquea por decir de alguna manera hasta que no regrese del sleep
 

Los últimos temas