Funktion ausführen ohne auf das Ende zu warten

  • Hallo,

    wie kann ich eine Funktion ausführen ohne auf das Ende zu warten (ist eine Schleife)? Dann brauche ich noch was um die Funktion wieder "zukillen" (also die Schleife ). Wie kann ich sowas machen?

    Viele Grüße

    Gespenst

    • Offizieller Beitrag

    Ist es so schwer, Fragen verständlich zu stellen? ;(
    Bestimmt an die hundert mal wurden Hinweise gegeben, wie man sinnvoll sein Problem darstellt.
    Nun zum 101.
    - welches ist die Ausgangssituation
    - was möchtest du erreichen
    - was ist bisher getan
    - Codebeispiel !!!

    Meine Glaskugel sagt mir, dass du wahrscheinlich während eine Schleife läuft, eine andere Funktion gleichzeitig ausführen möchtest.
    Schau dir mal AdlibEnable an.
    Aus einer Schleife kommst du mit ExitLoop wieder raus (If Bedingung Then ExitLoop).

  • Hallo gespenst,

    was Du erreichen möchtest ist echtes Multitasking, dazu gibt es in AutoIt mit Bordmitteln eigentlich nur das von BugFix erwähnte AdlibEnable / AdlibDisable. Das Problem bei AdLibEnable ist aber, das es kein echtes Multitasking ist, weil nur die AdlibEnable Funktion Dein laufendes Script unterbricht, aber nicht umgekehrt.

    Wenn also die AdLib Funktion länger dauert als das Aufrufintervall ist, bekommst Du ein ernsthaftes Problem -> Rechner friert ein (wahrscheinlich, habe ich bisher nicht provoziert).

    Da Du eine While 1 Schleife verwenden willst - also Endlosschleife - hängt es sehr stark von der Schnelligkeit ab, mit der die Abbruchbedingung eintritt, ob es überhaupt funktionieren kann. Ich denke mal, das ist eher nciht das gesuchte.

    Dann gibt es aber im englischen Forum eine UDF, mit der ein Multithreading möglich wird, ist aber nicht ganz trivial -> http://www.autoitscript.com/forum/index.php?showtopic=23545

    Viel Erfolg,

    TrueMu

    • Offizieller Beitrag

    @Gespenst: Du solltest schon etwas konkreter werden. Beim OnEvent-Mode beispielsweise benutzt man sowieso eine While-WEnd-Schleife, die meist ungenutzt "rumliegt". Dort könnte man auch andere Dinge verrichten lassen, während die GUI über Funktionsaufrufe (fast) nebenbei funktioniert.
    Damit kann man viele Dinge auch ohne echtes Multithreading erreichen. Zusätzlich kann man noch AdlibEnable benutzen, wie bereits geschrieben wurde.
    Es kommt also im wesentlichen auf den Einzelfall an. Wie würde denn Dein Programmcode aussehen, wenn Du zwei Scripte schreiben würdest, die parallel laufen würden?