Seite 1 von 2
Prozeduren paralell ablaufen lassen - ohne threads
Verfasst: 02.12.2008 18:29
von Tompazi
Wie kann ich Prozeduren paralell ablaufen lassen - ohne Threads. (ich brauche nämlich die Rückgabewerte (strings) der Prozeduren.)?
MfG Tompazi
Verfasst: 02.12.2008 18:35
von Josef Sniatecki
Leider ist das wirklich fast unmöglich die Prozeduren so aufzubauen, dass
sie parallel ablaufen. Du sagst, du möchtest dies wegen der
Rückgabewerte: Nun, dann würde ich dir globale Variablen
empfehlen.
Beispiel:
Code: Alles auswählen
Procedure.l A(Dummy.l)
...
GlobalString1="A finished"
EndProcedure
Procedure.l B(Dummy.l)
...
GlobalString2="B finished"
EndProcedure
A=CreateThread(@A(),0)
B=CreateThread(@B(),0)
WaitThread(A)
WaitThread(B)
String1$=GlobalString1
String2$=GlobalString2
Ich hoffe ich konnte dir damit helfen
Verfasst: 02.12.2008 18:48
von STARGÅTE
die frage ist dabei ob du aus den beiden Proceduren die "parallel laufen sollen, vllt nicht eine machen kannst, in der dann dein zeug "gleichzeitig" bearbeitet werden kann.
Verfasst: 02.12.2008 18:52
von NicTheQuick
Threads haben doch sowieso keine Rückgabewerte. Dazu musst du sogar globale
Variablen benutzen.
Verfasst: 02.12.2008 19:29
von PMV
... ich übergebe den Threads immer Strukturen.
MFG PMV
Verfasst: 02.12.2008 20:17
von Tompazi
danke gute Idee
Hab ich da was falsch verstanden?
Code: Alles auswählen
Global global1, global2
Procedure Proc1()
Repeat
global1 + 1
Until global1 = 10
EndProcedure
Procedure Proc2()
Repeat
global2 + 1
Until global2 = 15
EndProcedure
CreateThread(@Proc1(),0)
CreateThread(@Proc2(),0)
MessageRequester("out","Should be 10: " + Str(global1) + " Should be 15: " + Str(global2))
End
Verfasst: 02.12.2008 20:20
von STARGÅTE
jo ...
nach dem die Thread gestartet wurden kommt ja SOFORT das MessageRequester
die Schleien in den proceduren werden fast garnicht bearbeitet...
ein Delay(10) dazwischen sollte schon helfen oder ein WaitThread
EDIT: und die Proceduren brauchen noch ein Parameter
Verfasst: 02.12.2008 20:26
von Tompazi
oh. eh logisch
STARGÅTE hat geschrieben:
EDIT: und die Proceduren brauchen noch ein Parameter
??
Verfasst: 02.12.2008 20:27
von STARGÅTE
bei CreateThread(@Proc1(),0)
übergibst du doch einen Parameterwert, hier 0
dieser muss auch in der Procedure "aufgenommen" werden, ist ja egal ob du ihn brauchst oder nicht !
also:
Code: Alles auswählen
Procedure Proc1(Irgendwas)
Repeat
global1 + 1
Until global1 = 10
EndProcedure
Verfasst: 02.12.2008 20:29
von PMTheQuick
Tompazi hat geschrieben:oh. eh logisch
STARGÅTE hat geschrieben:
EDIT: und die Proceduren brauchen noch ein Parameter
??
Ich bin mir jetzt nicht sicher, aber ich glaube es ist so: Du kannst Threads ohne Parameter starten, empfohlen ist aber mit Parameter. Zum Beispiel ein Dummy-Parameter:
Procedure Thread(dummy)
...
EndProcedure
CreateThread(@Thread(), 1)
Oder was weiss ich für ein Wert. Ist glaub sicherer. Aber keine Ahnung ob das genau so stimmt
Gruss
PMTheQuick
