problem mit timerinit()

  • hi,

    ich habe in folgendem code das problem dass der timer nciht korrekt gestartet wird.
    in der msgbox, die zur kontrolle dient, werden werte jenseits der 10^6 ausgegeben, was bei einer programmlaufzeit kaum der fall sein kann.
    vlt könnte mich jmd auf meinen programmierfehler hinweisen.

    [autoit]


    Func auto()
    $esc = 0
    $delay = GUICtrlRead($Input1)*1000
    $end = GUICtrlRead($Input2)
    $time = TimerInit()
    MsgBox(0, "test", $delay)
    for $start = 1 to $end step 1
    if (TimerDiff($time)) > $delay Then
    if $esc = 0 then
    MsgBox(0, "test", $time)
    MouseMove($x, $y, 0)
    sleep(500)
    MouseClick("left")
    MouseClick("left")
    EndIf
    $time = TimerInit()
    EndIf
    next
    $esc = 1
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von bocky3 (15. April 2009 um 10:17)

    • Offizieller Beitrag
    [autoit]

    Func auto()
    $esc = 0
    $delay = GUICtrlRead($Input1)*1000
    $end = GUICtrlRead($Input2)
    $time = TimerInit()
    MsgBox(0, "test", $delay)
    for $start = 1 to $end step 1
    if TimerDiff($time) > $delay Then
    if $esc = 0 then
    MsgBox(0, "test", $time)
    MouseMove($x, $y, 0)
    sleep(500)
    MouseClick("left")
    MouseClick("left")
    EndIf
    $time = TimerInit()
    EndIf
    next
    $esc = 1
    EndFunc

    [/autoit]

    die If Abfrage :

    [autoit]

    if $esc = 0 then

    [/autoit]

    trifft immer zu , da du den Wert erst außerhalb der For Next Schleife setzt und dann die Function beendet wird . Ich denke das hast du nicht so beabsichtigt. Anderenfalls wäre die Abfrage unnütz da du beim Funktionsaufruf $esc = 0 machst .

  • die if abfrage ist nicht die ursache des problems. man kann sie getrost ausklammern und dient noch einem anderen zweck. $esc ist wie $x und $y global definiert.
    ebenso wenig ist es nicht wichtig ob ich (timerdiff()) oder timerdiff() schreibe.

    das problem liegt, soe glaube ich in der ersten timerinit() zumindest bekommt man schon dort unsinnige werte heraus, wenn man sie dort abfragt. nur sehe ich meinen fehler nicht.

    • Offizieller Beitrag

    OMG .

    Ich bin heut irgendwie Blind , deine MessageBox muß ja dummes Zeug ausgeben .

    [autoit]

    Func auto()
    $esc = 0
    $delay = GUICtrlRead($Input1)*1000
    $end = GUICtrlRead($Input2)
    $time = TimerInit()
    MsgBox(0, "test", $delay)
    for $start = 1 to $end step 1
    if (TimerDiff($time)) > $delay Then
    if $esc = 0 then
    MsgBox(0, "test", TimerDiff($time))
    MouseMove($x, $y, 0)
    sleep(500)
    MouseClick("left")
    MouseClick("left")
    EndIf
    $time = TimerInit()
    EndIf
    next
    $esc = 1
    EndFunc

    [/autoit]

    Den Wert von $Time kannst du nicht direkt anzeigen .

  • edit:
    lag an der timerinit()
    habs mit sleep gelöst.

    [autoit]


    Func auto()
    $esc = 0
    sleep(500)
    for $start = 1 to GUICtrlRead($Input2) step 1
    if $esc = 0 then
    sleep($Input1*1000)
    MouseMove($x, $y, 0)
    sleep(500)
    MouseClick("left")
    MouseClick("left")
    EndIf

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

    next
    $esc=1
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von bocky3 (15. April 2009 um 10:17)