Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Pausa en Visual Basic

Estas en el tema de Pausa en Visual Basic en el foro de Visual Basic clásico en Foros del Web. Hola estoy intentando generar pausas de 1 segundo entre diversas instrucciones de Visual Basic 6, pero si busco en la ayuda no encuentro la forma ...
  #1 (permalink)  
Antiguo 28/10/2004, 01:43
Avatar de 123
123
 
Fecha de Ingreso: junio-2001
Mensajes: 141
Antigüedad: 22 años, 10 meses
Puntos: 0
Pausa en Visual Basic

Hola estoy intentando generar pausas de 1 segundo entre diversas instrucciones de Visual Basic 6, pero si busco en la ayuda no encuentro la forma de indicarlo y buscando p ineternet aparece Sleep 1, o Timer , etc

Pero VB me indica que la sintaxi no es correcta.

¿Cómo se lo puedo indicar?
Gracias
  #2 (permalink)  
Antiguo 28/10/2004, 10:12
 
Fecha de Ingreso: septiembre-2004
Mensajes: 88
Antigüedad: 19 años, 7 meses
Puntos: 0
Busca directamente la sintaxis de los comandos timer y sleep en la ayuda de Visual Basic, si no biene intenta conseguir alguna ayuda más completa.
  #3 (permalink)  
Antiguo 28/10/2004, 12:00
 
Fecha de Ingreso: octubre-2004
Ubicación: COLOMBIA
Mensajes: 240
Antigüedad: 19 años, 6 meses
Puntos: 3
Información

Hola Mi Querido Amigo Por Que No Usas El Control Timer Eso Es Lo Que Queire Decir Con Timer, Lo Pones Con Un Interval De 1000, Ya Que Maneja Milisegundos
  #4 (permalink)  
Antiguo 28/10/2004, 12:54
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 3 meses
Puntos: 7
VB6 no tiene el método Sleep por una simple y sencilla razón: Se da por sentado que ninguno que programe en VB6 utilizara varios threads. Pero si quieres tener tiempos muertos, la opción del control timer que te presentan RadicalEd y Racoton es muy adecuada.
Otro modo sería un loop que compare el tiempo transcurrido de la función timer de VB6:
Código:
'Modo de uso:
'Esperar 1000
Sub Esperar(ByVal msEspera As Long)
Dim msFin As Long
	msFin = (Timer * 1000) + msEspera
	Do
	Loop While (Timer * 1000) < msFin
End Sub
Aún cuando la función espera como parámetro milisegundos, la función no es muy exacta, ya que la función timer tiene una precisión de centésimas de segundo. Además, un bucle así de inútil, desperdicia los valiosos time slots de tu procesador. Pero basta para muchos casos.

Por último, puedes usar de la API de windows, el método Sleep:
Código:
'VOID Sleep(
' DWORD dwMilliseconds // sleep time in milliseconds
');
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Ventaja: el tiempo de espera es más preciso (rango de milisegundos en verdad). Además, lo que hace el método, es suspender la ejecución, por lo que no carga al procesador (al contrario del método del bucle).

Saludos.

Última edición por Beakdan; 28/10/2004 a las 12:56
  #5 (permalink)  
Antiguo 29/10/2004, 02:44
Avatar de 123
123
 
Fecha de Ingreso: junio-2001
Mensajes: 141
Antigüedad: 22 años, 10 meses
Puntos: 0
Gracias a todos

Por si os parece demasiado raro que quiera pausas... se trata de un PC que debe estar trabajando durante horas de demostración, por lo que me interesa que la gente pueda ver lo que está haciendo con calma. Se trata de demostración de que puede desarrollar varios programas a la vez por lo que si me interesa que no consuma más recursos de los imprescindibles.

He probado el segundo código que me indicas Breakdan, de este modo. Pero me subralla la penúltima línea y responde "Los comentarios solamente pueden aparecer después de End Sub, End Funtion o End Property".
¿Lo he insertado mal? A esta macro la llamo desde la macro Madre en la que voy insertando las Esperas.

Código PHP:
Sub Espera2Tm()
'
Espera2Tm Macro
'

'
'VOID Sleep(
DWORD dwMilliseconds // sleep time in milliseconds
);
Private Declare 
Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
End Sub 
De todos modo yo había conseguido este código que me funciona pero supongo q también consume más recursos de los imprescindibles, ¿no?

Código PHP:
Sub EsperaTm()
'
EsperaTm Macro
'

'
newHour Hour(Now())
newMinute Minute(Now())
newSecond Second(Now()) + 1
waitTime 
TimeSerial(newHournewMinutenewSecond)
Application.Wait waitTime
End Sub 
  #6 (permalink)  
Antiguo 29/10/2004, 10:55
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 3 meses
Puntos: 7
La declaración de la función la realizas a nivel de módulo en VB6. Pero parece que estás usando VBA ¿o me equivoco? Si es ese el caso, no estoy seguro de que puedas usar la declaración de la API.

En todo caso, tu función parece ser válida (el objeto application es algo que nunca había visto).

Saludos.
  #7 (permalink)  
Antiguo 29/10/2004, 11:50
 
Fecha de Ingreso: octubre-2004
Ubicación: COLOMBIA
Mensajes: 240
Antigüedad: 19 años, 6 meses
Puntos: 3
Información

Que Tal Si Colocas El Api Antes De La Subrutina, Creo Que Asi Te Serviria
  #8 (permalink)  
Antiguo 02/11/2004, 04:09
Avatar de 123
123
 
Fecha de Ingreso: junio-2001
Mensajes: 141
Antigüedad: 22 años, 10 meses
Puntos: 0
Hola, he estado haciendo pruebas de la demostración con la macro que comentaba que me funciona. La he de poner en funcionamiento a la mismo tiempo que otras aplicaciones, de momento va bien pero hay algo que no me gusta. Solo por poner en marcha la macro en Excel es uso de CPU se pone al 100%, y aunque acepta bien otras aplicaciones no me gusta que consuma tantos recursos, porque simplemente cambia 6 valores para que se modifiquen 2 gráficos, no creo que sea para tanto.

No hay alguna otra manera q haga que espere, pero sin consumir.
Voy a probar a substituir la espera, por la reproducción de un archivo de sonido que dure 1 segundo haber que consigo, ¿Sabéis si puede servir de algo?

Por cierto no domino a penas de VB, así que hacer los comentarios como para “novato” por favor.
Gracias

Última edición por 123; 02/11/2004 a las 04:12
  #9 (permalink)  
Antiguo 08/09/2010, 12:22
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Pausa en Visual Basic

se puede realizar de la siguiente manera ya sea en VB 6.0 o en VBA

se declara la función con la api de windows

Código:
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
luego en el procedimiento que se necesite llamar la función solo se realiza lo siguiente

Código:
Sub Calcular()
    .
    .
    .
    Call Sleep(10000) 'espera por 10 segundos
    .
    .
    .
End Sub
y de todos modos gracias por la declaración de la función que era lo que estaba buscando

PSDT: RE-Tarde pero vale la pena el aporte
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 09:55.