if statement vereinfachen

  • Hallo,
    ich möchte aus Performance Gründen gerne folgendes if statement vereinfachen:

    [autoit]


    If _Hans(0x41) Then
    _Peter('a')
    sleep(100)
    EndIf

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

    If _Hans(0x42) Then
    _Peter('b')
    sleep(100)
    EndIf

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

    If _Hans(0x43) Then
    _Peter('c')
    sleep(100)
    EndIf

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

    If _Hans(0x44) Then
    _Peter('d')
    sleep(100)
    EndIf

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

    If _Hans(0x45) Then
    _Peter('e')
    sleep(100)
    EndIf

    [/autoit]

    Ich dachte an etwas mit Case:

    [autoit]


    Func _Hans($input)
    ...
    Switch ($input)
    Case 0x41
    _Peter('a')
    ...

    [/autoit]

    aber ich glaube, so kann ich es nicht machen,
    kann mich jemand beraten?
    LG
    Captain09

    Einmal editiert, zuletzt von Captain09 (11. Januar 2014 um 19:10)

  • Meine Lösung:

    [autoit]

    For $i = 0x41 To 0x45
    If _Hans($i) Then
    _Peter(Chr($i+32))
    Sleep(100)
    EndIf
    Next

    [/autoit]


    Viel stärker kann man das denke ich nicht vereinfachen, schon gar nicht ohne die beiden Funktionen zu kennen.

    Edit: Verkürzen ≠ Vereinfachen
    Ich habe es zwar verkürzen können, aber die Performance wird dadurch wahrscheinlich auch nicht besser (besonders da For-Schleifen so langsam sind).

  • howdy

    [autoit]


    Func _Hans($bInput)
    Switch $bInput
    Case 0x41
    _Peter("a")
    Case 0x42
    _Peter("b")
    Case 0x43
    _Peter("c")
    EndSwitch
    sleep(100) ;brauchst du dieses sleep tatsächlich?
    EndFunc

    [/autoit]

    ich denke mal das dein code wirklich nur ein beispiel war..
    oder funktioniert das in deinem fall nicht?

  • danke schön

    sleep brauche ich, damit Peter nur 1x und nicht 40x aufgerufen wird, wenn ich kurz a drücke

  • interessante for-schleife ohne step :)
    trotzdem danke

  • möp,

    Zitat

    sleep brauche ich, damit Peter nur 1x und nicht 40x aufgerufen wird, wenn ich kurz a drücke

    da empfehle ich dir es anders zu lösen da du das ganze script damit ja pausierst...

    du könntest mit timerinit() und timerdiff() arbeiten... je nach anwendungssituation.. weiß ja nicht was dein script genau tut

  • Lass doch die Zeit ganz aus dem Spiel...

    Spoiler anzeigen
    [autoit]


    #include <Misc.au3>

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

    $hUser32 = DllOpen("User32.dll")
    $sKey = "41"

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

    While True
    If _IsPressed($sKey, $hUser32) Then
    _MyFunc()
    Do
    Sleep(20)
    Until Not _IsPressed($sKey, $hUser32)
    EndIf

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

    Sleep(20)
    WEnd

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

    Func _MyFunc()
    ConsoleWrite("Taste gedrückt!" & @CRLF)
    EndFunc

    [/autoit]

    lg

  • und wenn jetzt währenddessen b gedrückt wird?
    dann wirds einfach verschluckt


    Das kannst du ja auch entsprechend mit _IsPressed abprüfen.
    Alternativ kannst du auch HotKeys benutzen.

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski