2 Func parallel zueinander ausführen

08/15/2011 13:13 xEr0r#1
Ist es möglich 2 Funktionen parallel zueinander auszuführen? z.B wenn ich einen Button drücke und dann einen 2., dass beide Funktionen ausgeführt werden gleichzeitig?
08/15/2011 13:14 buFFy!#2
hmm.. ich weiß nicht wie das interpretiert wird, aber versuch doch mal CreateThread aufzurufen.
bin mir recht sicher das da was geht.
08/15/2011 13:16 uragan#3
buFFy! ich glaub der will eher das ganze in autoit :)

Func kannste aufrufen mit
Quote:
Call
08/15/2011 13:19 buFFy!#4
Quote:
Originally Posted by uragan View Post
buFFy! ich glaub der will eher das ganze in autoit :)

Func kannste aufrufen mit
und jetzt?

dllcall ftw
08/15/2011 13:26 uragan#5
hehe, da muss ich passen, mit DllCall bin ich nicht so befreundet.
08/15/2011 13:32 buFFy!#6
ich aber !
Code:
$lpStartRoutine = DllCallbackRegister('AdditionalThread', 'int', 'ptr')
If $lpStartRoutine == 0 Then
	MsgBox(0x10, "Error", "DllCallbackRegister failed")
	Exit
EndIf

Func AdditionalThread($void)
	MsgBox("", "", "Additional Thread")
EndFunc   ;==>AdditionalThread

Func CreateThread($LPTHREAD_START_ROUTINE)
	$handle = DllCall("kernel32.dll", "hwnd", "CreateThread", "ptr", 0, "dword", 0, "long", DllCallbackGetPtr($LPTHREAD_START_ROUTINE), "ptr", 0, "long", 0, "int*", 0)
	Return $handle[0]
EndFunc   ;==>CreateThread

CreateThread($lpStartRoutine)
MsgBox("", "", "Mainthread")
die threadkommunikation würde ich dann über globale variablen gestalten,
suspend und resumethread bleibt hier nämlich aus. geht wahrscheinlich auch, aber wozu? ^^
08/15/2011 16:18 ZeraPain#7
wenn du beies in einer schleife einbaust dann funktioniert das ohne probleme!
durch den button kannst du z.b. eine variable von false auf true setzen sodass der teil in der schleife dann ausgeführt wird.
ansonsten gibt es bestimmt auch noch eine andere lösung aber dazu müsstest du dein problem mal genauer schildern.
08/15/2011 16:39 Freddy​#8
Quote:
Originally Posted by ZeraPain View Post
wenn du beies in einer schleife einbaust dann funktioniert das ohne probleme!
durch den button kannst du z.b. eine variable von false auf true setzen sodass der teil in der schleife dann ausgeführt wird.
ansonsten gibt es bestimmt auch noch eine andere lösung aber dazu müsstest du dein problem mal genauer schildern.
Wenn man beides in eine Whileschleife packt ist es aber nichtmehr Parallel
08/15/2011 16:47 ZeraPain#9
naja wirklich parallel kannst du sowieso nichts laufen lassen (auch nicht mit threads!)
dazu müsstest du dich schon mit multiprocessing auseinandersetzen aber ich denke einfach mal, dass das hier nicht der fall sein wird ;-)
08/15/2011 16:54 Freddy​#10
Quote:
Originally Posted by ZeraPain View Post
naja wirklich parallel kannst du sowieso nichts laufen lassen (auch nicht mit threads!)
dazu müsstest du dich schon mit multiprocessing auseinandersetzen aber ich denke einfach mal, dass das hier nicht der fall sein wird ;-)
er möchte auch nur, dass sie gleichzeitig starten
08/15/2011 17:03 ZeraPain#11
über diese aussage lässt sich streiten.
"wenn ich einen Button drücke und dann einen 2." ist schonmal kein gleichzeitiges starten.
08/15/2011 17:08 buFFy!#12
hier gibts nix zum streiten. die frage war ob man 2 funktionen parallel zueinander ausführen kann,
die antwort ist gegeben, und jetzt ruhe. danke.
08/16/2011 09:46 bollen#13
Eine einfache lösung wäre auch
Code:
AdlibRegister("Funk1" ,1)
AdlibRegister("Funk2" ,1)
.....
und am anfang jeder funktion wider
Code:
Funk Funk1()
AdlibUnRegister("Funk1")
.....
EndFunc

Func Funk2()
AdlibUnRegister("Funk2")
....
EndFunc
08/16/2011 11:32 buFFy!#14
das unterbricht aber den mainthread
08/16/2011 13:28 | Moep |#15
Wenn an die Function nur werte übergeben werden müssen, sie etwas ausführt und nix zurückgeben brauch, dann wäre es wiohl am einfachsten die func in ein extra script umzulagern und es per shellexecute aufzurufen.

btw: @ Butterkuchen, wenn du nichs konstruktives zu dem Thema beitragen kannst, dann klemm dir deine Kommentare. Sowas wie "er möchte auch nur, dass sie gleichzeitig starten" ist für mich einfach nur Spam, was der TE möchte kann er uns selbst mitteilen.