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. :wink:

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 ;-)