GUI-While mit ständiger UDP-Abfrage

  • Hallo,

    ich habe ein Programm geschrieben, dass den GUI-MessageLoop Modus (mit While 1-Schleife) verwendet. Das Programm soll ständig auf UDP-Nachrichten "horchen", weswegen ich die Abfrage auf UDP-Empfang auch in der While 1-GUI-Schleife durchführe. Das Problem dabei ist, dass die GUI immer ein wenig "nachhängt", was doch etwas störend ist. Auch die Funktion AdlibEnable brachte mir da keinen Erfolg.

    Was ich benötige, sind zwei parallele While 1-Schleifen, wobei eine GUI-Abfragen und die andere UDP-Abfragen durchführt, ohne dass diese sich gegenseitig ausbremsen.

    Hier noch ein Teilauschnitt vom Code:

    • Offizieller Beitrag

    Hi!

    Außer mit AdlibEnable (pseudo-Threading) gibt es in AutoIt keine Möglichkeit, echte Threads zu verwenden. Wenn du deine Schleife nicht anders optimieren kannst, bestünde noch die Möglichkeit, das ganze in zwei Programme aufzuteilen, die beispielsweise über Dateien miteinander kommunizieren könnten.

    peethebee

  • Hi,

    auch hier nun die Lösung (danke peethebee, hab mir zwar schon gedacht, das es in einem Skript nicht machbar ist, aber naja...):

    Ich glaube man darf AdlibEnable() nicht überstrapazieren ^^. Bei einem Sleep-Wert von 100 schmierte die ganze GUI immer ab, weswegen ich dachte auch das funktioniert nicht. Hier der Code (wie gesagt, lag nur am Sleep-Wert - 200 läuft super):

    [autoit]

    AdlibEnable("_CheckUDPRecv", 200)

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

    Func _CheckUDPRecv()
    $udpmsg = UDPRecv($boundedsocket, $udpport)
    If $udpmsg <> "" Then
    [...]
    EndIf
    EndFunc

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

    While 1
    $msg = GUIGetMsg(1)

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

    [...]
    WEnd

    [/autoit]