TODOPIC

Lenguajes de programación para PC => Visual Basic => Mensaje iniciado por: fastyx en 07 de Agosto de 2006, 09:09:58

Título: como insertar un delay en un ciclo for
Publicado por: fastyx en 07 de Agosto de 2006, 09:09:58
Amigos: necesito conocer como se inserta un delay en un ciclo for ya que estuve leyendo sobre el timer pero no le engancho la onda

for k= 1 to k = 200
que haga algo
intervalo de 1 segundo
next k

desde ya gracias!!
Título: Re: como insertar un delay en un ciclo for
Publicado por: kokorski en 07 de Agosto de 2006, 13:07:25
Lo puedes hacer con una funcion como esta:

Código: Visual Basic
  1. Public Sub Espera(Segundos As Double)
  2.        Dim ComienzoSeg As Double
  3.        Dim FinSeg As Double
  4.        ComienzoSeg = Timer
  5.        FinSeg = ComienzoSeg + Segundos
  6.        Do While FinSeg > Timer
  7.            DoEvents
  8.            If ComienzoSeg > Timer Then
  9.                FinSeg = FinSeg - 24 * 60 * 60
  10.            End If
  11.        Loop
  12. End Sub

En tu ejemplo seria:

Código: Visual Basic
  1. for k= 1 to k = 200
  2. que haga algo
  3. espera 1
  4. next k
Título: Re: como insertar un delay en un ciclo for
Publicado por: Toph en 07 de Agosto de 2006, 19:40:10
Amigos: necesito conocer como se inserta un delay en un ciclo for ya que estuve leyendo sobre el timer pero no le engancho la onda

for k= 1 to k = 200
que haga algo
intervalo de 1 segundo
next k

desde ya gracias!!
fastyx, a continuacion te dejo un link donde explican un ejemplo de como hacer un delay con el timer talvez te pueda servir, es parecido a lo que posteo kokorski, pero explicado, checalo  :-):
http://support.microsoft.com/default.aspx?scid=kb%3Bes%3B96069 (http://support.microsoft.com/default.aspx?scid=kb%3Bes%3B96069)
hay otras formas de hacer un delay precisamente utilizando un For, donde quieres el retraso pones lo siguiente
Código: [Seleccionar]
for k= 1 to k = 200
Call delay
next k
y esta es la rutina "delay"
Código: [Seleccionar]
Sub delay()
For i = 0 To 10000 Step 1
        For a = 0 To 1000 Step 1
        Next a
    Next i
End Sub
esta rutina delay, me da un segundo de retraso, esos numeros 10000 y 1000 dependen de la velocidad de tu maquina, puede que en algunas maquinas te de mas o menos de un segundo, es de probar valores.

saludos  :-/ 


Título: Re: como insertar un delay en un ciclo for
Publicado por: BrunoF en 07 de Agosto de 2006, 19:52:45
Hola Tania.
No me parece que sea la solución más acertada la que comentas.
Primero porque bien dijiste, el tiempo que le lleva ejecutar la rutina Delay, varía de maquina en maquina.
Y segundo, porque estas exigiendo al 100% al procesador. Impidiendo que otras aplicaciones se realicen correctamente, y provocando que el programa de VB no responda durante estos retardos que creas.

En todo caso, para que el programa responda dentro de un ciclo como este, debes incluir dentro del for de Delay() la instruccion DoEvents, que es la que permite a la PC atender a los demas procesos.

Saludos.
Título: Re: como insertar un delay en un ciclo for
Publicado por: kokorski en 08 de Agosto de 2006, 09:26:10
Estoy de acuerdo con BrunoF, si no colocas un Doevents el sistema durante ese tiempo esta KO....


Saludos
Título: Re: como insertar un delay en un ciclo for
Publicado por: Toph en 08 de Agosto de 2006, 19:00:19
En todo caso, para que el programa responda dentro de un ciclo como este, debes incluir dentro del for de Delay() la instruccion DoEvents, que es la que permite a la PC atender a los demas procesos.
Saludos.
:) si BrunoF tienes razon al igual que kokorski, debe ir un Doevents dentro del for (se me fue  :roll: ) y efectivamente ese retraso es relativo como lo dije, por supuesto que es mucho mejor usar Timer por eso le puse el enlace a fastyx donde explican una rutina para hacer delay con timer y esta incluido el Doevents  :), ese retraso usando un For se lo puse porque fastix habia manifestado que no entendia el timer y es otra forma de hacer un retraso claro no es una forma optima de hacerlo sobretodo por eso de que depende de la maquina.
corrigiendo entonces deberia quedar asi la rutina delay:
Código: [Seleccionar]
Sub delay()
For i = 0 To 10000 Step 1
        For a = 0 To 1000 Step 1
        Doevents
        Next a
    Next i
End Sub