Wie der titel schon sagt möchte ich euch zeigen wie man in autoit multithreaded!
und zwar habe ich vor einiger zeit eine udf gefunden ,welche es mir erlaubt in autoit mehrere threads zu nutzen.
viele denken bestimmt ,dass es kein richtiges multithreading ist und das script durch funktionen wie msgbox und winwait(-active,-close,-notactive) trotzdem pausiert wird ,was aber nicht stimmt.
Hier mal ein kleines beispiel:
Wie das funktioniert:
erst benutzt man die DllCallbackRegister funktion um die handle der aufzurufenden funktion rauszubekommen.
danach erstellt man mit DllStructCreate eine Struktur ,in welche man (nicht notwendiger weise) in das element 1 den wert 10 reinschreibt.
wenn man diese sachen gemacht hat ,kann man mit CreateThread die im DllCallbackRegister eingegebene funktion aufrufen lassen.
und zwar habe ich vor einiger zeit eine udf gefunden ,welche es mir erlaubt in autoit mehrere threads zu nutzen.
viele denken bestimmt ,dass es kein richtiges multithreading ist und das script durch funktionen wie msgbox und winwait(-active,-close,-notactive) trotzdem pausiert wird ,was aber nicht stimmt.
Hier mal ein kleines beispiel:
Code:
$Handle1 = DllCallbackRegister("ThreadTest1", "int", "ptr")
$Handle2 = DllCallbackRegister("ThreadTest2", "int", "ptr")
$Struct1 = DllStructCreate("Char[200];int")
DllStructSetData($Struct1, 1, 10)
CreateThread($Handle1, $Struct1)
$Struct2 = DllStructCreate("Char[200];int")
DllStructSetData($Struct2, 1, 10)
CreateThread($Handle2, $Struct2)
MsgBox(0x40, "Thread 1", "Default Thread")
Func CreateThread($Handle, $struct)
$return = DllCall("kernel32.dll", "hwnd", "CreateThread", "ptr", 0, "dword", 0, "long", DllCallbackGetPtr($Handle), "ptr", DllStructGetPtr($struct), "long", 0, "int*", 0)
Return $return[0]
EndFunc
Func ThreadTest1($x)
MsgBox(0x40, "Thread 2", "Added Thread #1")
EndFunc ;==>_ThreadStart
Func ThreadTest2($y)
MsgBox(0x40, "Thread 3", "Added Thread #2")
EndFunc ;==>_ThreadStart
erst benutzt man die DllCallbackRegister funktion um die handle der aufzurufenden funktion rauszubekommen.
danach erstellt man mit DllStructCreate eine Struktur ,in welche man (nicht notwendiger weise) in das element 1 den wert 10 reinschreibt.
wenn man diese sachen gemacht hat ,kann man mit CreateThread die im DllCallbackRegister eingegebene funktion aufrufen lassen.