Prozessorlast

  • Hallo,

    ich hoffe ihr könnt mir helfen, ich habe ein einfaches Skript für ein Flashgame erstellt, welches nach Eingabe der Buchstaben a,s,d,f,g (zu Erkennung der Mausposition) Mausklicks emuliert. Das Skript funktioniert, leider habe ich eine Prozessorlast von 100%. Was kann ich da am Code verändern? Kommt er überhaupt aus den ganzen While Schleifen wieder raus?

    [autoit]


    ; AutoIt Version: 3.0
    #Include <Misc.au3>
    $dll = DllOpen("user32.dll")
    hotkeyset("{ESC}", "Term")
    ; HotKeySet ("{F7}", "start")

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

    dim $feather_cord, $width = 100, $height = 60, $time, $sp, $featherx, $feathery

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

    While 1

    while 1
    ;Sleep (100)
    If _IsPressed("41", $dll) Then

    $x1 = MouseGetPos(0)
    $y1 = MouseGetPos(1)
    ExitLoop
    EndIf
    WEnd


    while 1
    ;Sleep (100)
    If _IsPressed("53", $dll) Then

    $x2 = MouseGetPos(0)
    $y2 = MouseGetPos(1)
    ExitLoop
    EndIf
    WEnd

    while 1
    ;Sleep (100)
    If _IsPressed("44", $dll) Then

    $x3 = MouseGetPos(0)
    $y3 = MouseGetPos(1)
    ExitLoop
    EndIf
    WEnd

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

    while 1
    ;Sleep (100)
    If _IsPressed("46", $dll) Then

    $x4 = MouseGetPos(0)
    $y4 = MouseGetPos(1)
    ExitLoop
    EndIf
    WEnd

    while 1
    ;Sleep (100)
    If _IsPressed("47", $dll) Then

    $x5 = MouseGetPos(0)
    $y5 = MouseGetPos(1)
    ExitLoop
    EndIf
    WEnd

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

    While 1
    MouseClick ("left",$x1, $y1)
    sleep (500)
    MouseClick ("left",$x2, $y2)
    sleep (500)
    MouseClick ("left",$x3, $y3)
    sleep (500)
    MouseClick ("left",$x4, $y4)
    sleep (500)
    MouseClick ("left",$x5, $y5)
    sleep (500)
    WEnd
    WEnd

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


    func Term ()
    DllClose($dll)
    exit
    endfunc

    [/autoit]

    Vielen Dank
    Gruß Mario

    Einmal editiert, zuletzt von mdr1978 (7. Juni 2010 um 09:26)

  • Die Lösung hast du auskommentiert ;)
    Die Sleeps in den einzelnen Schleifen sind schon gut so - sie sorgen dafür das der Rechner sich nach jedem einzelnen Schleifendurchlauf für die angegeben Zeit erholen kann.
    Ich denke mal du hast die auskommentiert weil da das Ispressed nicht mehr so gut funktioniert hat?
    Falls ja - setz den Sleep-Wert auf kleinere Werte - es reichen da auch wenige Millisekunden um die Prozessorlast mit dem Sleep zu drücken.

    Kommt er überhaupt aus den ganzen While Schleifen wieder raus?


    Aus der äußersten große Schleife kommt er nur durch´s Beenden des Programmes mit ESC.

    Ansonsten bevor unsere Schreihälse hier auftauchen und beim Wort "Flashgame" ihrem pawlowschen Reflex erliegen:
    Lies nochmal in Ruhe die Forenregeln durch und beachte dies bei folgenden Postings.

    Einmal editiert, zuletzt von AspirinJunkie (7. Juni 2010 um 08:35)

  • Hallo,

    danke für die schnelle Antwort.

    Ich habe jetzt die Werte auf 10 gesetzt, und dies auch in der großen while schleife eingefügt, die Prozessorlast bleibt trotzdem bei 100%.

    Ich habe schon einige Skripte zum automatisieren gemacht, welche ich im Produktiven Einsatz gebraucht habe, mir geht es nur darum,
    herauszufinden warum die Prozessorlast bei 100% ist.

    Gruß
    Mario

  • Vielleicht ne blöde Frage: Das Kommentar-Semikolon hast du schon entfernt vor den Sleeps?
    Bei mir hat er im letzten Teil eine Auslastung von etwa 20%.
    Ich muss zugeben das mir das auch viel vorkommt für die paar MouseClicks() ich aber dort kein Ansatz sehe wie man die Last dort noch drücken könnte.
    Ansonsten brauchst du in der äußersten Schleife keine Sleeps setzen da die Schleife an sich unwichtig ist.
    Kannst sie auch entfernen da die letzte innere Schleife nie beendet werden kann und somit die äußere Schleife nur jeweils einen Durchgang machen kann.

  • klar, die sleeps laufen schon, die Auslastung liegt bei den ersten 5 Schleifen bei 0%.

    Beim Ausführen der letzten Schleife steigt die Auslastung dann etwas, könnte aber auch an der VMware Maschine liegen.
    Beim Hauptrechner kann ich mit 20% leben.

    Vielen Dank für die schnelle Hilfe.