Mausbewegung beschleunigt Programmausführung?!

  • Hallo zusammen,
    ich weiß, das etwas ähnliches schon einmal gepostet wurde, allerdings kann ich den Thread nicht mehr finden (Oscar war dort auch involviert, mehr weiß ich nicht mehr^^)
    Wenn ich das folgende Script starte, dann bewegen sich die Buttons in einer bestimmten Geschwindigkeit. Wird nun die Maus bewegt, dann bewegen sich die Buttons auch schneller und die Prozessorlast steigt um das 3-fache! Wieso das? Oder "wecke" ich mit der Mausbewegung ggf (interrupt) den Prozessor (AMD 4850e) aus irgendeinem Sleepmodus/Stromsparmodus?

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>

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

    $anz=10

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

    global $button[$anz+1],$x[$anz+1],$y[$anz+1]
    $gui=guicreate("Test",600,600)
    for $i=1 to $anz
    $button[$i]= guictrlcreatebutton($i,10+random(20,500,1),10+random(20,500,1),20,20)
    next

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

    $Msgbox=Guicreate("Eigene Messagebox",300,80,50,50)
    $label=guictrlcreatelabel("Die Variablen werden im Fenstertitel angezeigt!",10,10,280,20)
    $msb1=GUICtrlCreateButton("Button1",20,35)
    $msb2=GUICtrlCreateButton("Button2",180,35)
    guisetstate(@sw_show,$gui)
    guisetstate(@sw_show,$msgbox)
    $variable=0
    adlibenable("_move",1000)

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

    while 1
    $msg=GUIGetMsg(1) ;array mit Daten
    switch $msg[1] ;welches fenster löst das Ereignis aus?
    case $msgbox ;die msgbox wars...
    if $msg[0]=$msb1 then $variable=1 ;den Buttons variablen zuweisen
    if $msg[0]=$msb2 then $variable=2 ;den Buttons variablen zuweisen
    if $msg[0]=-3 then guisetstate(@sw_hide,$msgbox) ;msgbox schließen
    if $msg[0]=$msb1 or $msg[0]=$msb2 then winsettitle($Msgbox,"","Die Variable ist: "&$variable)
    ;hier könnte man nun die messagebox "deaktivieren"
    case $gui ;die hauptgui bekam die Nachricht
    if $msg[0]=-3 then Exit ;prog beenden beenden
    endswitch

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

    for $i=1 to $anz
    $a=controlgetpos($gui,"Test",$button[$i])
    if $a[0]<10 then $x[$i]=-$x[$i]
    if $a[1]<10 then $y[$i]=-$y[$i]
    if $a[0]>490 then $x[$i]=-$x[$i]
    if $a[1]>490 then $y[$i]=-$y[$i]
    controlmove("Test","",$button[$i],$a[0]+$x[$i],$a[1]+$y[$i],$a[0]/10,$a[0]/10)
    next
    wend
    exit
    func _move()
    for $i=1 to $anz
    $x[$i]=random(-2,+2,1)
    $y[$i]=random(-2,+2,1)
    next
    _WinAPI_RedrawWindow($gui)
    endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Ich denke, das liegt am GUIGetMsg Modus. Denn wenn GUIGetMsg oft keinen Return bringt, drosselt es sich irgendwie selbst und verlangsamt somit deinen Mainloop. Probiers mal im OnEvent Mode aus ;)

    Edit: Das gleiche passiert auch hier.

    Den Thread hab ich mir zufällig grade durchgelesen, daher hab ich halt mal den Lösungsansatz von wraithdu / UEZ gepostet ^^

  • Sollte man ggf. in die Hilfe zu GuiGetMsg() aufnehmen, daß zeitkritische Scripte nicht unbedingt vorteilhaft beeinflusst werden^^