Autor Tema: como insertar un delay en un ciclo for  (Leído 6787 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
como insertar un delay en un ciclo for
« 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!!

Desconectado kokorski

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 50
Re: como insertar un delay en un ciclo for
« Respuesta #1 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
Saludos desde Cádiz

Desconectado Toph

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 84
Re: como insertar un delay en un ciclo for
« Respuesta #2 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
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  :-/ 



El tiempo perdido es dificil de recuperar, trata de no desperdiciarlo
atrevete de vez en cuando a hacer algo nuevo
¿Sera este el año que tanto he deseado?

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: como insertar un delay en un ciclo for
« Respuesta #3 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.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado kokorski

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 50
Re: como insertar un delay en un ciclo for
« Respuesta #4 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
Saludos desde Cádiz

Desconectado Toph

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 84
Re: como insertar un delay en un ciclo for
« Respuesta #5 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

El tiempo perdido es dificil de recuperar, trata de no desperdiciarlo
atrevete de vez en cuando a hacer algo nuevo
¿Sera este el año que tanto he deseado?