(mal wieder ein) Timer Problem

  • Hallo zusammen,

    ich habe für ein Skript einen Timer gebastelt (Spoiler).

    Spoiler anzeigen
    [autoit]

    $Timer = TimerInit() ; Timer starten
    Do
    Sleep(100)
    Until MouseGetCursor() = 1 ; warten bis der upload startet (cursor ändert sich)
    Do
    Sleep(100)
    Until MouseGetCursor() <> 1 ; warten, bis der Upload fertig ist (cursor wird wieder normal)
    $Time = TimerDiff($Timer) ; Timer stoppen
    $File = FileOpen("timer.txt", 1)
    FileWrite($File,Round($Time / 1000,2) & " Sekunden (" & $Time & " ms)" & @CRLF)
    FileWrite($File, $Time & @CRLF) ; Zeit an "timer.txt" anhängen
    FileClose($File)

    [/autoit]

    Das Skript fängt komischerweise schon am Anfang meines Codes an, den Timer zu starten.
    Weiß jemand warum das der Fall ist?

    Hier mal das kompl. Skript.

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <String.au3>
    #include <timers.au3>

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

    Run("C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe")
    WinWaitActive("Startseite - Microsoft Visual Studio (Administrator)")
    Sleep(5500) ; Wartezeit bis Visual Studio startbereit ist

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

    MouseClick("left", 38, 229,1) ; Klick´s zum Hochladen in
    Sleep(1500)
    MouseClick("left", 57, 301, 1)
    Sleep(1500)
    MouseClick("right", 192, 301, 1)
    Sleep(1500)
    MouseClick("left", 292, 312, 1)
    Sleep(2500)

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

    Send("{TAB 10}") ; Dat. auswählen
    Sleep(500)
    Send("{d}")
    Sleep(200)
    Send("{u}")
    Sleep(200)
    Send("{m}")
    Sleep(200)
    Send("{m}")
    Sleep(200)
    Send("{y}")
    Sleep(500)
    Send("{Enter}")

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

    $Timer = TimerInit() ; Timer starten
    Do
    Sleep(100)
    Until MouseGetCursor() = 1 ; warten bis der upload startet (cursor ändert sich)
    Do
    Sleep(100)
    Until MouseGetCursor() <> 1 ; warten, bis der Upload fertig ist (cursor wird wieder normal)
    $Time = TimerDiff($Timer) ; Timer stoppen
    $File = FileOpen("timer.txt", 1)
    FileWrite($File,Round($Time / 1000,2) & " Sekunden (" & $Time & " ms)" & @CRLF)
    FileWrite($File, $Time & @CRLF) ; Zeit an "timer.txt" anhängen
    FileClose($File)
    Sleep(7000)
    MouseClick ("left", 150, 355)
    Sleep(200)
    Send("{DEL}")
    Sleep(1000)
    Send("{Enter}")

    [/autoit]


    Gruß Marco :rock:

  • Ich weiß zwar nicht so genau was Du mit

    Zitat

    Das Skript fängt komischerweise schon am Anfang meines Codes an, den Timer zu starten

    meinst, aber:

    - Der Timer startet mit "TimerInit()" und nicht "am Anfang des Scripts"
    - Sollte die Zeile mit dem TimerInit() wohl hinter die erste Do-Until-Schleife, damit man die Differenz für den Upload ermitteln kann.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Danke für die Antwort.
    Ich habe es jetzt etwas umgeschrieben aber ich bin komme einfach nicht auf die richtige Lösung..
    In das .txt file schreibt das Skript nach dem Durchlauf:

    0.1 Sekunden (98.5975194285199 ms)
    98.5975194285199 ?(

    Spoiler anzeigen
    [autoit]

    Do
    $Timer = TimerInit() ; Timer starten
    Sleep(100)

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

    While MouseGetCursor() = 1 ; warten bis der upload startet (cursor ändert sich)
    WEnd
    Until MouseGetCursor() <> 1 ; warten, bis der Upload fertig ist (cursor wird wieder normal)

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

    $Time = TimerDiff($Timer) ; Timer stoppen
    $File = FileOpen("timer.txt", 1)
    FileWrite($File,Round($Time / 1000,2) & " Sekunden (" & $Time & " ms)" & @CRLF)
    FileWrite($File, $Time & @CRLF) ; Zeit an "timer.txt" anhängen
    FileClose($File)

    [/autoit]

    Ich will eig. nur die Zeit Messen, in der der Cursor sich ändert.
    Das sind geschätzte 4-5 Sekunden. Also iwas ist faul. :wacko: *verzweifelt*

    Zitat

    Ich weiß zwar nicht so genau was Du mit


    Dieses Prob. hat sich erledigt ;)

    Gruß Marco

  • Und was passiert wenn der Cursor <>1 ist wenn du die do until Schleife betrittst und 100ms nicht ausreichen bis sich der cursor ändert?

    Du startest den Timer, der Cursor ist <>1.
    Du schläfst 100ms.
    Deine while Schleife wird direkt übersprungen. weil der cursor <> 1 ist und die Bedingung nicht erfüllt ist.
    Deine do until Schleife wird ebenfalls verlassen, weil die Bedingung erfüllt ist.

    Ergebnis: eine Zeit im 100ms Bereich mit kleiner Abweichung, weil die Timer eben nicht 100% genau sind.

    Davon ab noch einige Anmerkungen:

    1. kann man externe Fenster mit den Window Managment Funktionen wie controlclick, controlsend oder controlcommand und viele weitere sehr viel besser und zuverlässiger steueren als mit mouseclick oder send
    2. sleeps sind ebenfalls unzuverlässig, besser benutzt man Funktionen wie winwait, winexists oder wingettitle um auf eine Veränderung zu warten und den nächsten Script Schritt zu starten
    3. ist der mousecursor vermutlich kein zuverlässiger Indikator für einen erfolgreichen Upload. Was passiert, wenn ein anderes Programm oder Windows dazwischen funkt und den Mauscursor verändert? Ich denkemal, dass es viel besser wäre den Windowtext oder title des Progressfensters zu überwachen, sofern es sowas geben sollte.

    Einmal editiert, zuletzt von misterspeed (27. September 2012 um 16:15)

  • Hallo Maggo Meggl,

    du hast Micha_he's Rat nicht richtig umgesetzt, so war es gemeint:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <String.au3>
    #include <timers.au3>

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

    Run("C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe")
    WinWaitActive("Startseite - Microsoft Visual Studio (Administrator)")
    Sleep(5500) ; Wartezeit bis Visual Studio startbereit ist

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

    MouseClick("left", 38, 229,1) ; Klick´s zum Hochladen in
    Sleep(1500)
    MouseClick("left", 57, 301, 1)
    Sleep(1500)
    MouseClick("right", 192, 301, 1)
    Sleep(1500)
    MouseClick("left", 292, 312, 1)
    Sleep(2500)

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

    Send("{TAB 10}") ; Dat. auswählen
    Sleep(500)
    Send("{d}")
    Sleep(200)
    Send("{u}")
    Sleep(200)
    Send("{m}")
    Sleep(200)
    Send("{m}")
    Sleep(200)
    Send("{y}")
    Sleep(500)
    Send("{Enter}")

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

    Do
    Sleep(100)
    Until MouseGetCursor() = 1 ; warten bis der upload startet (cursor ändert sich)
    $Timer = TimerInit() ; Timer starten
    Do
    Sleep(100)
    Until MouseGetCursor() <> 1 ; warten, bis der Upload fertig ist (cursor wird wieder normal)
    $Time = TimerDiff($Timer) ; Timer stoppen
    $File = FileOpen("timer.txt", 1)
    FileWrite($File,Round($Time / 1000,2) & " Sekunden (" & $Time & " ms)" & @CRLF)
    FileWrite($File, $Time & @CRLF) ; Zeit an "timer.txt" anhängen
    FileClose($File)
    Sleep(7000)
    MouseClick ("left", 150, 355)
    Sleep(200)
    Send("{DEL}")
    Sleep(1000)
    Send("{Enter}")

    [/autoit]

    mfg autoBert

  • ... und in dem script aus #3 wird der Timer in der "äußeren" Do-Until-Schleife immer wieder mit dem TimerInit() zurückgesetzt, bis die Schleife auf Grund des beendeten Downloads verlassen wird. Daher erhältst Du immer nur einige ms.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • ... und in dem script aus #3 wird der Timer in der "äußeren" Do-Until-Schleife immer wieder mit dem TimerInit() zurückgesetzt, bis die Schleife auf Grund des beendeten Downloads verlassen wird. Daher erhältst Du immer nur einige ms.

    Nein das Timer Zurücksetzen dürfte nicht das eigentliche Problem sein, da die "do until" Schleife durch die "while" Schleife solange "pausiert" wird bis letztlich die Abbruchbedingung für die "do until" Schleife erreicht wird und somit, sofern es denn funktionieren würde, der Timer nur solange in der "do until" Schleife resetet wird bis der Upload tatsächlich startet, was prinzipiell ja nicht verkehrt wäre. Funktioniert aber nur dann wenn die Abbruchbedingung der "do until" nicht von vornherein schon gegeben ist und sich im ersten Durchlauf auch nichts daran ändert, so wie ich das in meinem Posting mal gemutmaßt habe.

    Wie gesagt ich bezweifle, dass der Mauscursor alleine ein zuverlässiges Kriterium sein kann.