elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Bucle por tiempo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Bucle por tiempo  (Leído 3,542 veces)
Dunkansdk

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Bucle por tiempo
« en: 14 Febrero 2011, 04:15 am »

Hola a todos quería saber como crear un bucle que tarde X tiempo la ejecución, es decir la duración del mismo

var = 0
Do While var < 255
var = var + 1
Loop
por poner un ejemplo estúpido xd ...

Que de llegar de 1 a 255 tarde 1 segundo (1000ms), por ejemplo... la idea sería no utilizar timers y hacer una función xd ,

Si alguien me puede ayudar, muchas gracias .


En línea

ignorantev1.1


Desconectado Desconectado

Mensajes: 617


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Bucle por tiempo
« Respuesta #1 en: 14 Febrero 2011, 04:19 am »

Código
  1. private declare sub Sleep lib "kernel32.dll"(byval mms as long)
  2.  
  3. ...
  4. for i=0 to 10
  5.      doevents
  6.     sleep(100) '<---- milisegundos
  7. next
  8.  


« Última modificación: 14 Febrero 2011, 04:27 am por ignorantev1.1 » En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: Bucle por tiempo
« Respuesta #2 en: 14 Febrero 2011, 04:22 am »

HOLA!!!

Yo lo haria con Doevents y GetTickCount para saber cuanto tiempo vas...

El problema de Sleep es que te congela la pc osea No permite ninguna otra ejecucion simultanea, cosa que doevents si permite  ::)

GRACIAS POR LEER!!!
En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
Dunkansdk

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Bucle por tiempo
« Respuesta #3 en: 14 Febrero 2011, 04:26 am »

HOLA!!!

Yo lo haria con Doevents y GetTickCount para saber cuanto tiempo vas...

El problema de Sleep es que te congela la pc osea No permite ninguna otra ejecucion simultanea, cosa que doevents si permite  ::)

GRACIAS POR LEER!!!

Es justamente lo que tenía en mente pero no me salía, un ejemplo por favor? (A)

de todos modos muchas gracias por responder ignorantev1.1 u.u
En línea

ignorantev1.1


Desconectado Desconectado

Mensajes: 617


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Bucle por tiempo
« Respuesta #4 en: 14 Febrero 2011, 04:26 am »

cierto amigo, se me paso lo de "doevents"  :)
En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: Bucle por tiempo
« Respuesta #5 en: 14 Febrero 2011, 13:01 pm »

HOLA!!!

Bueno aca lo tenes, ejecutara el codigo una vez por cada intervalo de tiempo.

Te dejo las 2 maneras que se me ocurrieron: (prefiero la primera)

Código
  1. Private Declare Function GetTickCount Lib "kernel32" () As Long
  2.  
  3. Private Sub Bucle()
  4.    Dim X As Long
  5.    Dim Milisec As Long 'cantidad de milisegundos por bucle
  6.    Dim Vueltas As Long 'cantidad de vueltas
  7.    Dim Time_Start As Long
  8.    Milisec = 1000
  9.    Vueltas = 10
  10.    Time_Start = GetTickCount()
  11.    For X = 1 To Vueltas
  12.        'Codigo a ejecutar si queres que lo haga apenas empieza el bucle sino lee abajo.
  13.        Do While Time_Start - getticount() < Milisec
  14.            DoEvents
  15.        Loop
  16.        Time_Start = Time_Start + Milisec
  17.        'El codigo a ejecutar si queres que lo haga despues del primer intervalo sino lee arriba.
  18.    Next
  19. End Sub

Código
  1. Private Declare Function GetTickCount Lib "kernel32" () As Long
  2.  
  3. Private Sub Bucle()
  4.    Dim X As Long
  5.    Dim Flag As Boolean ' Si esta en true Ejecuta el codigo
  6.    Dim Milisec As Long 'cantidad de milisegundos por bucle
  7.    Dim Vueltas As Long 'cantidad de vueltas
  8.    Dim Time_Start As Long
  9.    Milisec = 1000
  10.    Vueltas = 10
  11.    Flag = True ' aca si queres que la primera ejecucion sea cuando pase el primer intervalo quita esta linea
  12.    Time_Start = GetTickCount()
  13.    Do While X <= Vueltas
  14.        DoEvents
  15.        If Flag Then
  16.            'El codigo a ejecutar
  17.            Flag = False
  18.        End If
  19.        If (Time_Start - GetTickCount()) >= Milisec Then
  20.            X = X + 1
  21.            Flag = True
  22.            Time_Start = Time_Start + Milisec
  23.        End If
  24.  
  25.    Wend
  26. End Sub

GRACIAS POR LEER!!!
« Última modificación: 14 Febrero 2011, 16:35 pm por 79137913 » En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Bucle por tiempo
« Respuesta #6 en: 14 Febrero 2011, 16:04 pm »

puedes usar el api settimer con un callback (funcion publica en un modulo). O bien usar el gettickcount(o QueryPerformanceCounter si queres complicarla) con doevents. BlackZeroX tiene una alternativa con PostMessage y PeekMessage
En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: Bucle por tiempo
« Respuesta #7 en: 14 Febrero 2011, 16:37 pm »

HOLA!!!

Nota: El codigo que escribi puede llegar a tener un minimo desfasaje.

GRACIAS POR LEER!!!
En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
Dunkansdk

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Bucle por tiempo
« Respuesta #8 en: 14 Febrero 2011, 17:47 pm »

Muchas gracias a todos !!! lo terminé realizando de esta manera  :rolleyes: :
Código
  1. Private Declare Function SetTimer Lib "user32.dll" ( _
  2.    ByVal hwnd As Long, _
  3.    ByVal nIDEvent As Long, _
  4.    ByVal uElapse As Long, _
  5.    ByVal lpTimerFunc As Long _
  6.    ) As Long
  7.  
  8. Private Declare Function KillTimer Lib "user32.dll" ( _
  9.    ByVal hwnd As Long, _
  10.    ByVal nIDEvent As Long _
  11.    ) As Long
  12.  
  13. Private Const m_nIDEvent = 1
  14. Private Const m_uElapse = 20
  15.  
  16. Private Sub Tick()
  17.    If var <> 150 Then
  18.        var = var + 1
  19.    End If
  20. End Sub
  21.  
  22. Public Sub SetMyTimer(Form As Form)
  23.  Dim retval As Long
  24.    retval = SetTimer(Form.hwnd, m_nIDEvent, m_uElapse, AddressOf Tick)
  25. End Sub
  26.  
  27. Public Sub KillMyTimer(Form As Form)
  28.  Dim retval As Long
  29.    retval = KillTimer(Form.hwnd, m_nIDEvent)
  30. End Sub
« Última modificación: 14 Febrero 2011, 17:49 pm por Dunkansdk » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Bucle por tiempo
« Respuesta #9 en: 15 Febrero 2011, 04:17 am »

.
Puedes usar Wait()

Código
  1.  
  2. do
  3.    msgbox "Hola Mundo"
  4.    Wait segundos, 10, false
  5. loop
  6.  
  7.  

Temibles Lunas!¡.
En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda (Parar bucle con dato boolean) [bucle while]
Java
Dem0ny 5 18,279 Último mensaje 17 Diciembre 2008, 17:43 pm
por Dem0ny
Bucle en vb6 ????
Programación Visual Basic
marcofbb 2 1,736 Último mensaje 28 Mayo 2010, 03:44 am
por marcofbb
Cuanto tiempo le pongo al usleep del bucle para que no me salga limit cpu?
PHP
70N1 5 3,123 Último mensaje 19 Marzo 2013, 19:40 pm
por 70N1
Ejecutar funcion en bucle cada X tiempo.
Programación C/C++
Kaxperday 7 3,596 Último mensaje 13 Julio 2015, 23:54 pm
por ivancea96
Ayuda con un bucle de tiempo real
Scripting
Mr. Bit 0 225 Último mensaje 9 Marzo 2024, 17:13 pm
por Mr. Bit
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines