Timer Grande

Iniciado por Meg, 5 Enero 2006, 15:34 PM

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

Meg

Hola amigos, vereis es k tengo una duda resulta k qiero poner un timer k haga una determinada cosa cada 4 minutos pero el interval no me deja poner mas de 1 minuto K puedo hacer???

jrhomer

for i=0 to 3
   if i= 3 then
       ' hacer cosas
       i=0
   else
      i=i+1
   end if
next i

Declara i como pública y mete ese código en el TImer, así q cada 1 minutos hará eso... yo tp se pq solo (a priori) se puede poner 1 minuto (o lo q sea)

De modo que cada cada 4 minutos hará lo q kieras q haga y pondrá i=0 y como cada minuto i aumenta 1... pues en llegar al cuarto i=3, de modo que hará lo q haga y volverá a ponerla a i=0...


vamos es lo q se me ocurrio así d repente... espero q t sirva de ayuda.
ups!!

Slasher-K

Poné el siguiente código en un módulo estándar, y crea un formulario que se llame frmMain.

Este ejemplo utiliza la función SetTimer de la API para disparar un temporizador controlado mediante un bucle y la función Timer, de Visual Basic.

Establece la constante TIMER_INTERVAL a la cantidad de segundos que quieres que sea el intervalo del temporizador. Esto es sólo de prueba, luego verás cómo manejas ese tema.

Para iniciar el temporizador llama al procedimiento StartLongTimer, y para detenerlo a TerminateLongTimer.

Cuando se cumpla cada intervalo de tiempo el temporizador lo notificará llamando al procedimiento LongTimer_Timer, y allí realizarás las tareas que necesites.



Option Explicit

Const TIMER_INTERVAL = 86400  ' Intervalo del Timer, en segundos (le puse 1 día).

Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

Private bTerminateTimer As Boolean

Sub Main()
  Call frmMain.Show
End Sub

Sub StartLongTimer()
  bTerminateTimer = False
 
  ' Crea el temporizador del sistema que se ejecuta de
  ' forma asíncrona, de esta manera se evita el bloqueo
  ' del programa.
  '
  Call SetTimer(0&, 0&, 1000&, AddressOf LongTimerProc)
End Sub

Sub TerminateLongTimer()
  ' Establece la variable a verdadero para que
  ' se termine el procedimiento del temporizador.
  '
  bTerminateTimer = True
End Sub

Sub LongTimerProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Integer, ByVal dwTime As Long)
        Dim snTime!

  Call KillTimer(0&, idEvent)
 
  ' Guarda el intervalo de tiempo actual.
  '
  snTime = Timer
 
  Do While (Timer - snTime) < TIMER_INTERVAL
    ' Espera hasta que pase el tiempo especificado
    ' a menos que se cancele.
    '
   
    If bTerminateTimer Then Exit Do
   
    DoEvents
  Loop
 
  If Not bTerminateTimer Then
    ' Si no se canceló el temporizador notifica del evento
    ' y vuelve a inicializar el contador.
    '
    Call LongTimer_Timer
    Call StartLongTimer
  End If
End Sub

Sub LongTimer_Timer()
  ' Este procedimiento se llamará cada vez que pase el lapso de tiempo
  ' configurado para el temporizador.
  '
 
  ' Acá se puede hacer cualquier cosa que desee.
  '
  Debug.Print "Timer interval: " & Time$
End Sub


Saludos.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

programatrix

O mas facil, le pones que valla contando cada vez que pasa por la funcion timer hasta 5 veces:
Dim vez As Integer
Private Sub Form_Load()
Timer1.Interval = 60000 'El minuto
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
If vez = "5" Then 'si ha pasado 5 veces es que ha pasado 5 minutos
MsgBox "tiempo pasado"
vez = 0
Else
vez = vez + 1
End If
End Sub

Saludos  ::)

Meg

Muxas gracias x vuestra ayuda ya lo logre   ;)

Martín Fierro

Cita de: Rey11 en  5 Enero 2006, 17:33 PM
O mas facil, le pones que vaya contando cada vez que pasa por la funcion timer hasta 5 veces:
Dim vez As Integer
Private Sub Form_Load()
Timer1.Interval = 60000 'El minuto
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
If vez = "5" Then 'si ha pasado 5 veces es que ha pasado 5 minutos
MsgBox "tiempo pasado"
vez = 0
Else
vez = vez + 1
End If
End Sub

Saludos  ::)

Me gusto tu forma de solucionarlo, sin apis ni nada... Bien, yo no lo haría mejor..
Y no me importa nada..

zhidow

Haciendo un programa (soy novato) me tope con el mismo problema ,  :p despues de pensar un rato , probe poniendo dentro del Sub timer. una condicion que diga,
if (tiempo que tengo que esperar) = ( tiempo que necesito) then
''hacer la rutina
else
timer.enabled = false
timer.enabled = true
''asi comieza el conteo de nuevo
end sub

Ch3ck

Pero para que desactivar y activar el timer si eso lo hace él vuelve ha iniciar el conteo solo (eso si lo que escribiste está dentro del timer)

zhidow

SI disculpa aparte del codigo que si creas una variable tipo LONG, y le pones
dim Tiempos as long
(dentro del timer)
tiempos = tiempos + 60000

cada vez que llega al timer y no se cumple el tiempo le agrega 60000 ( 1 Minuto más) asi hasta llegar a los minutos que le pusiste..