Me estoy volviendo loco con los timers. (Vb.net)

Iniciado por #Aitor, 21 Octubre 2016, 05:42 AM

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

#Aitor

Buenas noches a todos, ¡Mucho tiempo sin pasar por aquí!

Os cuento mi idea y mi problema.

Mi idea es:

En el momento en el que la tecla adecuada es pulsada,  inicia un contador, a los tres minutos suena un pitido, y si la tecla no es pulsada en los próximos quince segundos,
vuelve a sonar el pítido en intervalos de quince segundos, así hasta que la tecla es pulsada, y una vez más empezaría a esperar 3 minutos para después seguir con los 15 segundos.

Dejo una imagen con un esquema que acabo de hacer para que se entienda mejor el ejemplo.




Aquí dejo la línea de código con sus comentarios para que os hagáis una idea de como voy.

Código (vb.net) [Seleccionar]
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

       Dim Ascii As Integer = Asc(My.Settings.optionsHotkeys) ' Esa variable contiene el ascii de la tecla guardada por el usuario.
       If (GetAsyncKeyState(Ascii)) Then ' Si es presionada...
       ...



Aquí no tengo idea de cómo seguir de una manera correcta, sin hacer chapuzas, sólo se me ocurrió meter más timers del estilo

Código (vb.net) [Seleccionar]
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

       Dim Ascii As Integer = Asc(My.Settings.optionsHotkeys) ' Esa variable contiene el ascii de la tecla guardada por el usuario.
       If (GetAsyncKeyState(Ascii)) Then ' Si es presionada...
       Timer2.Start()
       Timer2.Interval = NumericUpDown1.Value * 60 * 1000 'Minutos estupilados por el usuario.
       End if

Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
       ... 'Pitido
       Timer3.Start()
       Timer3.Interval = 15000 'Intervalo de 15 segundos
Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick
       ... 'Pitidos cada 15 segundos...



En fin, cómo veis aquí pierdo la cordura, no sé que hacer y me pongo a crear timers cuál imbécil a diestra y siniestra sin ningún tipo de sentido.

¿Alguna idea?

Edito:

Terminé solucionandolo de una forma que considero un tanto mediocre...

Código (vb.net) [Seleccionar]
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

        Dim Ascii As Integer = Asc(My.Settings.optionsHotkeys)

        If (GetAsyncKeyState(Ascii)) Then

            Select Case Timer2.Enabled
                Case False
                    Timer3.Start()
                    Timer3.Interval = NumericUpDown1.Value * 60 * 1000
                Case True
                    Timer2.Stop()
                    Timer3.Start()
            End Select
        End If

    End Sub
    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
        Sound.Play()
    End Sub

    Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick
        Sound.Play()
        Timer2.Interval = 15000
        Timer2.Start()
        Timer3.Stop()
    End Sub


Mi algoritmo en PHP (estupideces y más).
Código (php) [Seleccionar]
while($Se_feliz){
  Piensa_un_OBJETIVO(); // Sin excusas!
  if($Tienes_un_objetivo){
    Suspira(); // Sé paciente.
    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
      //RETURN; ¿O volvemos a empezar?
    }else{
      Inténtalo_de_nuevo();
    }
  }
}