Pseudo Desktop: Performance schwach

  • Hallo zusammen,

    so langsam bastele ich mich durch mein/meinen Schüler-Menü / Startbildschirm / "Pseudo Desktop" ...
    Da sind noch einige Dinge zu optimieren, aber was mich gerade am meisten interessiert ist die Reaktionsgeschwindigkeit.
    Bislang hatte ich in eine Switch-Geschichte 2 GUIGetMsg() abzuarbeiten.
    (Firfox starten / Programm beenden)
    Das ging soweit ganz gut.

    Jetzt habe ich das auf (vorwiegend) auf eine For-Schleife umgestellt, da ich die anzuzeigenden Programm-Icons mit GUICtrlCreatePic() aus einer INI-Datei hole.
    Nun ist es auf einmal so, dass die Programme nicht beim ersten Mausklick starten.
    Auch der Beenden-Button muss manchmal mehrfach gedrückt werden.
    Dabei habe ich gerade erst 2 Programme in der INI definiert. (Es sollen nicht mehr als 6 - MAX 12 werden ...)
    Wieso ist diese Vorgehensweis so langsam?

    Ich habe hier mal nur die While-Schleife hinkopiert.

    Aus der Funktion, die die INI ausliest kommen:
    $aProgName[] - Da stehen die Programmnamen / Fensternamen drin
    $aProgPicID[] - wird von GUICtrlCreatePic() übergeben
    $aProgPath[] - halt der Pfadname+Programmname

    [autoit]


    Opt('WINTITLEMATCHMODE', 2) ;==> Fuzzysuche bei Programmnamen für Fenster für WinExists() und WinActivate()

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

    While 1
    If GUIGetMsg() = $bEnd Then
    Exit; ==> Bleibt in der Form noch drin, bis alles funktioniert
    EndIf
    For $i = 1 TO UBound($aProgPicID)-1 ;==> ich arbeite mit _arrayAdd() und kann [0] nicht füllen - bin ich zu doof für
    If GUIGetMsg() = $aProgPicID[$i] Then ;==> In der INI stehen aktuell nur 2 Programme - Schleife muss max 2x durch ...
    If WinExists($aProgName[$i]) = 0 Then
    WinSetOnTop($hGui, '', 0)
    ShellExecute($aProgPath[$i])
    ExitLoop
    Else
    WinActivate($aProgName[$i]) ;==> aktiviert aber nur die letzte aktive Instanz ...
    ExitLoop
    EndIf
    EndIf
    Next
    WEnd

    [/autoit]
  • Anstatt den Rückgabewert von GuiGetMsg() in einer Variable zwischenzuspeichern rufst du immer wieder GuiGetMsg auf.
    Witzigerweise versucht GuiGetMsg() aber auch die CPU zu entlasten und wirkt daher ähnlich einem Sleep.
    Wenn du das nun zig mal in einer Schleife wiederholst, wird klar warum das so lahm wird.

  • Anstatt den Rückgabewert von GuiGetMsg() in einer Variable zwischenzuspeichern rufst du immer wieder GuiGetMsg auf.
    Witzigerweise versucht GuiGetMsg() aber auch die CPU zu entlasten und wirkt daher ähnlich einem Sleep.
    Wenn du das nun zig mal in einer Schleife wiederholst, wird klar warum das so lahm wird.

    Öhmm, :S , tatsächlich. Danke für den Hinweis. :)
    AAaaaber in der While-Schleife wird bei einem Turnus im Moment GUIGetMsg() 3x aufgerufen.
    1x In der If-Abfrage, 2x in der For-Schleife (2 Programme in der INI).
    Das soll schon so sehr bremsen?
    Werde ich morgen mal ändern.
    Jetzt bin ich zu müde ... :sleeping:

    Grüße,
    klaros