|
You last visited: Today at 02:38
Advertisement
[AutoIt]True Multithreading
Discussion on [AutoIt]True Multithreading within the AutoIt forum part of the Coders Den category.
07/28/2013, 13:47
|
#1
|
elite*gold: 0
Join Date: Jan 2013
Posts: 426
Received Thanks: 129
|
[AutoIt]True Multithreading
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:
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
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.
|
|
|
07/28/2013, 15:46
|
#2
|
elite*gold: 64
Join Date: May 2011
Posts: 1,228
Received Thanks: 847
|
Und wo sind die Credits?
Weil das Script dir auch nicht gehört.
Das ist ein c&p script.
|
|
|
07/28/2013, 15:53
|
#3
|
elite*gold: 12
Join Date: Jun 2012
Posts: 2,049
Received Thanks: 138
|
Außerdem ist das nicht Multithreading sondern Multiprocessing.
Schau im Taskmanager wenn du ein "CreateThread" an die Kernel32.dll schickst.
Außerdem nur mit 32bit und ohne upx verwenbar.
wenn du jetzt einen Hilfreichen Post hinterlassen willst, erkläre lieber wie die "Threads" untereinander Daten austauschen können, oder Variablen Global auf allen Threads verfügbar gemacht werden können.
Sonst bringt das ganze ja Null.
LG Fl00d3R
|
|
|
07/28/2013, 17:07
|
#4
|
elite*gold: 0
Join Date: Jan 2013
Posts: 426
Received Thanks: 129
|
Quote:
Originally Posted by BladeTiger12
Und wo sind die Credits?
Weil das Script dir auch nicht gehört.
Das ist ein c&p script.
|
Quote:
Originally Posted by FacePalmMan
und zwar habe ich vor einiger zeit eine udf gefunden ,welche es mir erlaubt in autoit mehrere threads zu nutzen.
|
Quote:
Originally Posted by Fl00d3R
Außerdem ist das nicht Multithreading sondern Multiprocessing.
Schau im Taskmanager wenn du ein "CreateThread" an die Kernel32.dll schickst.
Außerdem nur mit 32bit und ohne upx verwenbar.
wenn du jetzt einen Hilfreichen Post hinterlassen willst, erkläre lieber wie die "Threads" untereinander Daten austauschen können, oder Variablen Global auf allen Threads verfügbar gemacht werden können.
Sonst bringt das ganze ja Null.
LG Fl00d3R
|
bei mir kann ich alles auf allen threads benutzen. ob ich eine variable als local oder als global deklariere macht da keinen unterschied.
"Außerdem ist das nicht Multithreading sondern Multiprocessing." wenn ich keine extra-"threads" offen habe ,zeigt mir mein taskmanager 2 threads für Autoit.exe an. wenn ich aber threads öffne zeigt es mir mehr threads an.
|
|
|
07/28/2013, 20:11
|
#5
|
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
|
Quote:
Originally Posted by Fl00d3R
Außerdem ist das nicht Multithreading sondern Multiprocessing.
Schau im Taskmanager wenn du ein "CreateThread" an die Kernel32.dll schickst.
Außerdem nur mit 32bit und ohne upx verwenbar.
wenn du jetzt einen Hilfreichen Post hinterlassen willst, erkläre lieber wie die "Threads" untereinander Daten austauschen können, oder Variablen Global auf allen Threads verfügbar gemacht werden können.
Sonst bringt das ganze ja Null.
LG Fl00d3R
|
Ich bin mir nicht sicher ob man nicht auch Variablrn normal benutzen kann, selbst wenn man es nicht kann, wären NamedPipes eine Lösung.
Und so wie das für mich aussieht ist das MultiThreading und nicht MultiProcessing.
Für MultiProcessing müsste man CreateProcess benutzen.
|
|
|
07/28/2013, 23:07
|
#6
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
das ganze wurde hier schon sehr oft diskutiert... ein beinahe identischer code wurde zb vor ca 4 jahren schoneinmal gepostet...
leider ist das ganze sehr instabil und schwer überwachbar, was am ende für mehr probleme als nutzen sorgt...
wirklichen nutzen kann man meines erachtens hierraus keinen ziehen.
|
|
|
07/28/2013, 23:43
|
#7
|
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
|
Quote:
Originally Posted by lolkop
das ganze wurde hier schon sehr oft diskutiert... ein beinahe identischer code wurde zb vor ca 4 jahren schoneinmal gepostet...
leider ist das ganze sehr instabil und schwer überwachbar, was am ende für mehr probleme als nutzen sorgt...
wirklichen nutzen kann man meines erachtens hierraus keinen ziehen.
|
Jop AutoIt wurde leider nie Thread-safe gemacht, daher ist Multithreading wohl ohne größere Änderungen am AutoIt-Interpret nicht möglich.
|
|
|
07/29/2013, 21:43
|
#8
|
elite*gold: 0
Join Date: Jan 2013
Posts: 426
Received Thanks: 129
|
stimmt. autoit wurde nicht für multithreading gemacht. ich hab da eine etwas bekloppte idee. und zwar:
was wenn wir autoit multithreadingfähig machen? gucken wie andere sprachen das mit dem multithreading machen , gucken was autoit fehlt um multithreaden zu können und anschließend diese einzelnen sachen zum script hinzufügen.
|
|
|
07/29/2013, 23:43
|
#9
|
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
|
Quote:
Originally Posted by FacePalmMan
stimmt. autoit wurde nicht für multithreading gemacht. ich hab da eine etwas bekloppte idee. und zwar:
was wenn wir autoit multithreadingfähig machen? gucken wie andere sprachen das mit dem multithreading machen , gucken was autoit fehlt um multithreaden zu können und anschließend diese einzelnen sachen zum script hinzufügen.
|
Da hast du genau 2 Möglichkeiten das zu machen.
1. Irgendwie an den Source kommen, da AutoIt nicht mehr Open-Source ist.
2. Heftige Reverse Engineer-Analyse
Beides sehr schwer bzw. umständlich, wird also so schnell nichts.
Die einfachste Methode ist immer noch NamedPipes mit mehreren Proezssen zu nutzen.
|
|
|
Similar Threads
|
************** true buddy true BOT for aion
10/09/2009 - Aion Hacks, Bots, Cheats & Exploits - 14 Replies
My friend has Aionbuddy Aion Bot • Index page its the korean bot EVERYONE is talking about but No ONE has but he does its 15 usd a month its expensive yes but watch the short video he made I use this thing and WOWOWOW.
Aionbuddy Aion Bot • Index page and you can msn him and email him to buy it =)
|
All times are GMT +1. The time now is 02:38.
|
|