Parallele Schleifen

  • Ich möchte alle 5 Sekunden etwas zu einer Variable addieren. Gleichzeitig soll aber diese While Schleife laufen.

    [autoit]

    While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 HauptU() EndSwitch
    WEnd

    [/autoit]


    Wenn ich nun:

    [autoit]

    While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 HauptU() EndSwitchSleep(5000)$HolzR += 100GUICtrlSetData($Label12,$HolzR)WEnd

    [/autoit]

    mache, gehen die Buttons nicht mehr weil das Script pausiert ist.

  • Das geht mit AdlibRegister. Dafür brauchst du keine parallel laufenden Schleifen (was technisch gesehen sowieso nicht in der Art möglich ist ;)).

    Spoiler anzeigen
    [autoit]

    AdlibRegister("_Holz", 5000)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    HauptU()
    EndSwitch
    WEnd

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

    Func _Holz()
    $HolzR += 100
    GUICtrlSetData($Label12,$HolzR)
    EndFunc

    [/autoit]

    PS: Bitte verwende doch in Zukunft, um Scripte zu posten, einen anderen Browser oder lass dir was anderes einfallen, das kann doch kein Mensch lesen :D. Nicht jeder hat Lust und Zeit da wieder Zeilenumbrüche an die richtige Position reinzufriemeln ;).

  • Danke :) Hatte schon sowas in der Art bei Google gefunden aber hab es dann falsch in meinem Code umgesetzt.

  • Um die Anfangsfragestellung zu beantworten:
    Das mit der parallelen Schleife lässt sich nicht so umsetzen, wie du dir das denkst.
    Allerdings gäbe es diese Alternativlösung, die dem etwas nahe kommt.

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

    $hTimer = TimerInit()
    $HolzR = 0
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    EndSwitch

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

    If TimerDiff($hTimer) > 5000 Then
    ConsoleWrite("Holz: " & $HolzR & @CRLF)
    $HolzR += 100
    $hTimer = TimerInit()
    EndIf
    WEnd

    [/autoit]

    Allerdings ist name22's Lösung ohne jede Frage die bessere. ;)

    lg chess

  • Adlib ist grundsätzlich mit Vorsicht zu genießen.
    Ich würde auf jeden Fall die Version von Chess bevorzugen.

    Aus HolzR schließe ich, dass es um irgendein Spiel geht indem man alle 5sek Ressourcen bekommt.
    Soll ein Programm Rechner (und vorallem Geschwindigkeits) unabhängig laufen ist die Zeit der Falsche Maßstab.
    Dann muss man sich einen Counter in die Schleife basteln und alle x Durchläufe etwas tun.

    Stell dir ein Spiel vor wo man 1x alle 3sek schießen kann.
    Wenn ich einen langsamen PC habe vergehen in den 3sek grade mal 30 Frames (normal 180).
    Ich kann also 6x so schnell schießen.