mehrer aufgaben im script

  • hallo, mir ist eigentlich nur eine einzige lösung bekannt, eine weitere aufgabe parallel laufen zu lassen.

    [autoit]

    AdlibEnable

    [/autoit]

    wie ist es aber, wenn mehrere parallel sein sollen?

    BS:
    es ist irgent eine aufgabe im script erfüllt.
    jetzt soll an punkt xy ein eine zeit (sichtbar GUI) runterzählen.

    dann ist wieder was erfüllt und es soll an xyz auch wieder ein counter rnter laufen.

    es ist also so, das es mehere counter parallel sein müssen.

    Doktore

  • ne, nicht so.

    test an diesen kleinen GUI.
    es sollten alle drei counter gehn und trotzdem sollte das script noch auf eingaben reagieren.

    [autoit]

    #include <GUIConstants.au3>

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

    $Form1 = GUICreate("Form1", 168, 174, 766, 363)
    $Test = GUICtrlCreateLabel("Test", 67, 24, 25, 17)
    $Label2 = GUICtrlCreateLabel("??", 15, 70, 36, 17)
    $Label3 = GUICtrlCreateLabel("??", 64, 70, 36, 17)
    $Label4 = GUICtrlCreateLabel("??", 112, 70, 36, 17)
    $Go = GUICtrlCreateButton("Go", 56, 112, 51, 25, 0)
    GUISetState(@SW_SHOW)

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

    AdlibEnable("_1")
    Sleep(255)
    AdlibDisable()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    Case $Go
    For $i = 15 To 0 Step - 1
    ControlSetText("", "", $Label2, $i)
    Sleep(500)
    Next

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

    EndSwitch
    WEnd

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

    Func _1()
    For $o = 15 To 0 Step - 1
    ControlSetText("", "", $Label3, $o)
    Sleep(500)
    Next
    EndFunc ;==>_1

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

    Func _2()
    For $p = 15 To 0 Step - 1
    ControlSetText("", "", $Label4, $p)
    Sleep(500)
    Next
    EndFunc ;==>_2

    [/autoit]

    PS:
    die counter können ich auch mit einer weiteren datei gestartet werden. aber ich ich das hinbekommen soll weis ich ganz und gar nicht :(

    Doktore

    Einmal editiert, zuletzt von Dr.Galvany (8. Mai 2007 um 18:44)

  • das könnte man doch mit dem GUIOnEventMode machen oder lieg ich da falsch?

    in deiner schleife laufen die counter usw. aber dein proggi reagiert trotzdem auf zB drücken eines buttons oder sowas?

    hoffe ich hab dich nich falsch verstanden...

    greetz

  • ja das erstaunliche ist, das es neben der schleife noch reagiert :)

    aber hier in meinen BS:
    reagiert es nicht mehr :(

    oder habe ich es falsch zusammen geschrieben?

    es sollen also alle "Go's" unabhänig voneinander reagieren und auch das window closen.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus

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

    $Form1 = GUICreate("Test", 168, 174, 766, 363)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")

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

    GUICtrlCreateLabel("Test", 67, 24, 25, 17)

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

    $Label2 = GUICtrlCreateLabel("??", 15, 70, 36, 17)
    $Label3 = GUICtrlCreateLabel("??", 64, 70, 36, 17)
    $Label4 = GUICtrlCreateLabel("??", 112, 70, 36, 17)

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

    $Go = GUICtrlCreateButton("Go1", 26, 102, 51, 25, 0)
    GUICtrlSetOnEvent($Go, "_0")

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

    $Gp = GUICtrlCreateButton("Go2", 86, 102, 51, 25, 0)
    GUICtrlSetOnEvent($Gp, "_1")

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

    $Gi = GUICtrlCreateButton("Go3", 56, 132, 51, 25, 0)
    GUICtrlSetOnEvent($Gi, "_2")

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(50)
    WEnd

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

    Func _0()
    For $i = 15 To 0 Step - 1
    ControlSetText("", "", $Label2, $i)
    Sleep(500)
    Next
    EndFunc ;==>_0

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

    Func _1()
    For $o = 15 To 0 Step - 1
    ControlSetText("", "", $Label3, $o)
    Sleep(500)
    Next
    EndFunc ;==>_1

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

    Func _2()
    For $p = 15 To 0 Step - 1
    ControlSetText("", "", $Label4, $p)
    Sleep(500)
    Next
    EndFunc ;==>_2

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

    Func _exit()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    Doktore

  • Das Problem habe ich im Moment auch.

    Mir ist aufgefallen, wenn eine Schleife läuft, dass ich nichts anderes mehr machen kann in meinem Script.

    Was ich bis jetzt hier rausgelesen habe, sind einfach mehrere Scripte laufen lassen. Nur was ist wenn mehrere Schleifen in einem Fenster laufen sollen?
    Könnte man das nicht mit einer UDF machen? Wobei ich denke, dass die UDF auch nur eine Schleife laufen lassen kann.

  • hmmm vielleicht liegt es wirklich daran das autoit keine mehreren schleifen gleichzeitig verarbeiten kann???

    ich werd ma versuchen dir sowas zu basteln! bin da relativ zuversichtlich!

    greetz oli

    EDIT:

    Ok so zuversichtlich bin ich jetzt nicht mehr ;) blöde sache! - im englischen forum hat irgendjemand mal ne udf geschrieben aber funktioniert nich wirklich sauber... wie peethebee schon gesagt hat is es echt am sinnvollsten mehrere prozesse zu starten und den datenaustausch abzufangen... naja autoit is eben nur ne scriptsprache... :)

    greetz oli

    Einmal editiert, zuletzt von oliverh (10. Mai 2007 um 10:54)

    • Offizieller Beitrag

    Hi!

    AutoIt ist singlethreaded und wird es laut Devs auch bleiben. Echtes Multithreading ist komplex und man braucht es einfach zu selten.
    Mehrere Skripte parallel laufen zu lassen ist eine Möglichkeit (oft die schmerzfreieste) - man muss sich dann eben um Datenaustausch kümmern.
    Perfekt ginge es, wenn man alles in ein C++-Plugin packt, da kann man bequem hunderte Threads machen, wenn man lustig ist - aber dann kann (und sollte!) man es eben auch gleich ganz in einer Hochsprache schreiben...

    peethebee

  • hallo, ich habe mir das pack 1.1.0 rundergeladen.

    könntest du mir noch Bitte erklären wie das genau umgesetzt wird (funktionieren des packs)

    ich komme mit den englisch leider nicht klar :(

    edit:
    wie funktioniert so ein "datenaustausch abzufangen" ?(

    Doktore

    Einmal editiert, zuletzt von Dr.Galvany (10. Mai 2007 um 22:18)

  • Huhuuuuu!

    alsoooooo.... das is eine UDF-Datei die du mit in dein script einbauen musst - das funktioniert folgendermaßen:

    [autoit]


    #include <GUIConstants.au3>
    #include <Coroutine.au3>

    [/autoit]

    WICHTIG: Die UDF-Datei muss sich im selben Ordner befinden!

    Du hast nun die UDF (is nichts anderes als eine Funktionsbibliothek aus einer Datei) in dein script mit eingebunden und kannst die dortigen Funktionen nutzen.

    Hier einmal eine Auflistung aller Funktionen aus der <Coroutine.au3>:

    Grundfunktionen:

    _CoCreate()
    Create a coroutine script which can be instanced by _CoStart()

    _CoInclude()
    Include helper/wrapper functions to compliment the main body created by _CoCreate()

    _CoStart()
    Create an instance of a threaded function as created by _CoCreate()

    _CoYield()
    NOTE: Only to be used in coroutine scripts Pauses the coroutine and yields a value to the main script, returns any value passed by the corresponding call to _CoResume()

    _CoStatus()
    Returns the status of a coroutine

    _CoSend()
    Sends a variable into a child script

    _CoResume()
    Unpauses a coroutine, optionally sends a value back to the yielded coroutine

    _CoGetReturn()
    Retrieves a variable returned by a coroutine

    _CoKill()
    Closes a coroutine

    _CoCleanup()
    Closes all running coroutines, and deletes their respective temporary script files

    _CoChangeWorkingDir
    Changes the working directory for storing the temporary script files.
    NOTE: Default is @TempDir

    Miscellaneous Function List:
    NOTE: These functions are meant to be called internally by Coroutine.au3

    _PackVarToStr()
    Packs a variable into a string for transmission between scripts.

    _UnpackStrToVar()
    Unpacks a packed variable-string into its original structure, whether it be a string or array.

    _LineIsFunction()
    Classifies the given line as either the start/end of a function, or as a regular line.

    _RandomFileName()
    Generates a random unused filename for use with _CoCreate()


    ... diese Funktionen kannst du nun in deinem Script benutzen wie AutoIT-eigene Funktionen!

    Wen du einmal in die <Coroutine.au3> reinkuckst wirst du feststellen, dass der Autor der UDF jede Funktion wie in der AutoIT Hilfe erklärt hat - also es wäre für mich jetzt schwierig dir jede einzelne Funktion aus dem Stehgreif zu erklären...

    Hmmm also soweit ich weiß (hab den Pack leider nimmer drauf) gibts n ordner "examples" ... einfach mal n bissl einlesen!

    So aber jetzt xD

    Greetz Oli