AutoIt - echtes Multithreading!

  • Hab grad was ausprobiert und das kam raus:
    AUTOIT KANN JETZT MULTITHREADING

    Spoiler anzeigen
    [autoit]

    $handle = DllCallbackRegister("_Threadstart","int","ptr")

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

    ; Struct to send to the Thread
    $dll = DllStructCreate("Char[200];int")
    DllStructSetData($dll,1,"hi")
    DllStructSetData($dll,2,1234)

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

    $ret = DllCall("kernel32.dll","hwnd","CreateThread","ptr",0,"dword",0,"long",DllCallbackGetPtr($handle),"ptr",DllStructGetPtr($dll),"long",0,"int*",0)
    MsgBox(0, "Thread-Info", "Handle: " & $ret[0] & @CRLF & "Thread-ID: " & $ret[6])

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

    Func _ThreadStart($x)
    For $i = 1 To 10
    ConsoleWrite("Thread 1 !!!"&@LF)
    Sleep(100)
    Next

    $y = DllStructCreate("char[200];int",$x)
    MsgBox(0, "Thread 1", DllStructGetData($y,1) & @CRLF & DllStructGetData($y,2)&@CRLF &"AutoIt can Multithreading !!!")
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von progandy (29. März 2008 um 17:31)

  • Genial, damit tun sich ganz neue Möglichkeiten auf.

    ***Tiefe Verbeugung vor progandy****

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Mal zur Erklärung. LOL

    Multithreading
    Meist ist mit dem Begriff das softwareseitige Multithreading gemeint, bei dem in aller Regel nur ein Prozessor beteiligt ist. Die dann vorhandene scheinbare Gleichzeitigkeit wird in Wirklichkeit durch geschickte Programmierung erzeugt. Einzelne Threads eines Prozesses/Tasks können sehr schnell auf zeitkritische Ereignisse reagieren, während andere Threads langwierige Berechnungen durchführen.
    Ohne weitere Hardware-Unterstützung reduziert das Multithreading die Gesamtsystemleistung durch den bei Threadwechseln entstehenden Overhead. Deshalb wird der Programmierer die Anzahl der Threadwechsel möglichst gering halten.
    Bei Symmetrischen Multiprozessorsystemen kann die Rechenarbeit eines Prozesses/Tasks durch Multithreading auf mehrere Systemprozessoren verteilt werden.

    Das hardwareseitige Multithreading unterscheidet sich vom softwareseitigen dadurch, dass die Hardware eines Prozessors das gleichzeitige Abarbeiten mehrerer Threads unterstützt. Die Software muss durch softwareseitiges Multithreading oder mehrerer Prozesse/Tasks diese Fähigkeit ausnutzen.
    Da beim hardwareseitigen Multithreading kein Overhead beim Thread-Wechsel entsteht, sondern im Gegenteil durch die Vermeidung von Pipeline-Hazards unproduktive Taktzyklen vermieden werden, kann die Gesamtsystemleistung pro CPU steigen, indem Threadwechsel möglichst häufig vorgenommen werden. (Quelle: wikipedia)

    Okay, okay?! Nee, kein Wort von dem verstanden was Wikipedia das erklärt.

    Wozu braucht man ein Multithreading? Würde ich ja einfach einmal informativ wissen.

    Okay, ihr merkt, ich habe Wochenende

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Hi!

    Die "klassische" Anwendung ist, dass sich eine GUI weiterhin bedienen lässt, auch wenn im Hintergrund eine langwierige Funktion läuft. Ansonsten kann man natürlich alles mögliche parallel machen wollen ;).
    Aber Multithreading ist insofern keinesfalls trivial, da die Threadkoordination (Threads müssen z.B. oft auf bestimmte Ergebnisse oder Ereignisse warten) und Threadkommunikation (Threads müssen meist Daten austauschen) geschicktes Design und meist einigen Code erfordern...

    peethebee

  • Hm schade wegen den Fehlern aber kannst du da nicht noch irgendwas dran machen?

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

    • Offizieller Beitrag

    Hi,

    ich würde das Streben nach MT nicht immer als sinnvoll erachten. Warum wollt ihr das? Nennt mir eine Anwedung, die nicht durch Alternativen gesteuert werden kann.

    Sicher ist der Versuch es zu implementieren immer okay und löblich, aber für X % dieses Forums ist MT sowieso nicht einsetzbar, weil sie es nicht verstehen, oder falsch einsetzen würden.

    Mega

  • So wie es aussieht, funktioniert das leider doch nicht :(
    Die Threads werden durch den AutoIT-Interpreter einfach falsch umgesetzt. Man kann aber MultiThreading mit Timer-Callbacks emulieren, das geht dann :)

  • sowas gibst doch schon, zumindest bin ich mir relativ sicher, das schon gesehen zu haben im eng. Forum und nicht dein Thread

  • ne glaub hieß coroutine oder so, naja ist ja auch egal, mal schauen was sich drauß entwickelt
    edit: ok grad die sachen im eng. forum gelesen - na da wird doch nix drauß XD