Fehlersuche

  • Ich habe ein 'Timer'-Programm geschrieben.
    Der Fehler liegt darin, dass das Programm einen Ton(Beep) öfter als vorgesehen abgibt. Doch ich weiß nicht wo der Fehler liegt 8|

    Spoiler anzeigen
    [autoit]

    #require Admin ; Zur Sicherheit, damit alles gut läuft

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet( "{PGDN}", "Start1") ; Erster Timer
    HotKeySet( "{PGUP}", "Start2") ; Zweiter Timer

    [/autoit] [autoit][/autoit] [autoit]

    $delay=InputBox( "Zeit", "Geben sie die Wartezeit an(in [positiven]Sekunden):") ; Wie lange gewartet werden soll, bis...
    $delay=$delay*1000 -50 ; In Sekunden, von Milisekunden. + eine frühwarnung von 50 Milisec.

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While(1) ; Damit das Programm nicht sofort beendet wird(Alles nur mit Schleifen)
    Sleep(50)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ;Deklarierung
    $zeit2=0
    $unterschied2=0
    $zeit1=0
    $unterschied1=0

    Func Start1 () ;Erster Timer
    $zeit1=0
    $unterschied1=0
    $zeit2=0
    $unterschied2=0
    While 1 ;Solange bis der Ton erreicht werden soll =50sec sleep jeder Durchgang.
    $zeit1=TimerInit()
    Sleep(50)
    $unterschied1= TimerDiff($zeit1)
    $unterschied2= TimerDiff($zeit2)
    If $unterschied1>$delay Then ;Wenn erreicht= Akustisches Signal.
    $unterschied1=0
    $zeit1=0
    Beep()
    While 1 ; Falls 2. Timer noch läuft
    If $unterschied2>$delay Then
    $unterschied2=0
    $zeit2=0
    Beep()
    EndIf
    Sleep(50) ; Damit sich die Wiedergabe des Tons erst nach der Eingabe wiederholt
    WEnd
    ElseIf $unterschied2>$delay Then ; 2. Timer
    $unterschied2=0
    $zeit2=0
    Beep()
    While 1
    If $unterschied1>$delay Then
    $unterschied1=0
    $zeit1=0
    Beep()
    EndIf
    Sleep(50)
    WEnd
    EndIf
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;Gleiches Prinzip, nur andere Variablennamen.
    Func Start2 ()
    $zeit2=0
    $unterschied2=0
    $zeit1=0
    $unterschied1=0
    While 1
    $zeit1= TimerInit()
    Sleep(50)
    $unterschied1=TimerDiff($zeit1)
    $unterschied2=TimerDiff($zeit2)
    If $unterschied1>$delay Then
    $unterschied1=0
    $zeit1=0
    Beep()
    While 1
    If $unterschied2>$delay Then
    $unterschied2=0
    $zeit2=0
    Beep()
    EndIf
    Sleep(50)
    WEnd
    ElseIf $unterschied2>$delay Then
    $unterschied2=0
    $zeit2=0
    Beep()
    While 1
    If $unterschied1>$delay Then
    $unterschied1=0
    $zeit1=0
    Beep()
    EndIf
    Sleep(50)
    WEnd
    EndIf
    WEnd
    EndFunc

    [/autoit]

    Ich wäre sehr dankbar, wenn jemand den Fehhler findet!

    Liebe Grüße
    Sebastian :love:

    Einmal editiert, zuletzt von Assembler (24. November 2013 um 13:24)

  • Wenn ich es richtig verstanden habe, dann sollte das Dein Problem beheben:

    [autoit]

    HotKeySet("{PGDN}", "_Start1") ; Erster Timer
    HotKeySet("{PGUP}", "_Start2") ; Zweiter Timer
    HotKeySet("{Esc}", "_Exit") ; Exit

    [/autoit][autoit][/autoit][autoit]

    $delay = InputBox("Zeit", "Geben sie die Wartezeit an(in [positiven]Sekunden):") ; Wie lange gewartet werden soll, bis...
    $delay = $delay * 1000 - 50 ; In Sekunden, von Millisekunden. + eine frühwarnung von 50 Milisec.

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep(10)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _Start1()
    AdlibRegister("_Beep1", $delay)
    EndFunc ;==>_Start1

    [/autoit][autoit][/autoit][autoit]

    Func _Start2()
    AdlibRegister("_Beep2", $delay)
    EndFunc ;==>_Start2

    [/autoit][autoit][/autoit][autoit]

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit][autoit][/autoit][autoit]

    Func _Beep1()
    ConsoleWrite("Beep1: " & @MIN & ":" & @SEC & "." & @MSEC & @LF)
    Beep()
    EndFunc ;==>_Beep1

    [/autoit][autoit][/autoit][autoit]

    Func _Beep2()
    ConsoleWrite("Beep2: " & @MIN & ":" & @SEC & "." & @MSEC & @LF)
    Beep()
    EndFunc ;==>_Beep2

    [/autoit]