Prozeduren paralell ablaufen lassen - ohne threads

Anfängerfragen zum Programmieren mit PureBasic.
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Prozeduren paralell ablaufen lassen - ohne threads

Beitrag von Tompazi »

Wie kann ich Prozeduren paralell ablaufen lassen - ohne Threads. (ich brauche nämlich die Rückgabewerte (strings) der Prozeduren.)?

MfG Tompazi
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Beitrag 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
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Threads haben doch sowieso keine Rückgabewerte. Dazu musst du sogar globale
Variablen benutzen.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

... ich übergebe den Threads immer Strukturen. :wink:

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag von Tompazi »

oh. eh logisch
STARGÅTE hat geschrieben: EDIT: und die Proceduren brauchen noch ein Parameter
??
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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 
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
PMTheQuick
Beiträge: 630
Registriert: 05.05.2005 19:06

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