Variable mit Typ einer Struktur als Parameter in Prozedur

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Variable mit Typ einer Struktur als Parameter in Prozedur

Beitrag von Chimorin »

Heyho,

warum gibt das einen Fehler?!
Ich möchte einem Thread als Wert (Nur 1 Variable erlaubt) 2 Werte übermitteln, warum geht das nicht...
Pointer kann ich nicht verwenden.

Code: Alles auswählen

EnableExplicit

Structure zwei
  x.i
  y.i
EndStructure

Procedure fuellzwei(daten.zwei)
EndProcedure
Bild

- formerly known as Bananenfreak -
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Beitrag von ts-soft »

Nur als Pointer:

Code: Alles auswählen

 EnableExplicit

Structure zwei
  x.i
  y.i
EndStructure

Procedure fuellzwei(*daten.zwei)
EndProcedure 
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Beitrag von Chimorin »

Hrmpf. Das habe ich mir schon irgendwie gedacht.
Dann murkse ich eben mit Stringfield() rum :D
Bild

- formerly known as Bananenfreak -
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Beitrag von ts-soft »

Bananenfreak hat geschrieben:Hrmpf. Das habe ich mir schon irgendwie gedacht.
Dann murkse ich eben mit Stringfield() rum :D
Warum? Abgesehen vom * ergibt sich doch keinerlei Unterschied:

Code: Alles auswählen

EnableExplicit

Structure zwei
  x.i
  y.i
EndStructure

Procedure fuellzwei(*daten.zwei)
  Debug *daten\x
  Debug *daten\y
 
EndProcedure

Define test.zwei
test\x = 4711
test\y = 100

fuellzwei(test)

:wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Beitrag von Chimorin »

Ich habe angenommen, dass hierbei nicht der Wert, sondern die Speicheradresse übergeben wird. Ist nicht der Fall, somit gibt's keine Probleme. Ich probiers mal aus.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Beitrag von ts-soft »

Es wird die Speicheradresse übergeben, also ByRef. Ändern der Werte, ändert auch das Original.
Wenn Du das nicht möchtest, solltest Du die Werte neuen Variablen zuordnen oder den Speicher
Kopieren.

Das ist bei z.B. Arrays usw. genau das gleiche.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Beitrag von Chimorin »

Ok, ich habs ausprobiert.

Es funktioniert (Einfach Delay(10) nach dem Erstellen des Threads). Leider gibt der Thread keine Zeitersparnis her. Super.

Terrains in Threads erstellen lassen bringt irgendwie gar nichts, ich glaube das hängt wieder alles irgendwie in RenderWorld() drin.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Beitrag von ts-soft »

Für Threads könntest Du es so machen:

Code: Alles auswählen

EnableExplicit

Structure zwei
  x.i
  y.i
EndStructure

Procedure fuellzwei(*daten.zwei)
  Protected test.zwei
  test\x = *daten\x
  test\y = *daten\y
  FreeMemory(*daten)  
 
EndProcedure

Define *test.zwei = AllocateMemory(SizeOf(zwei))

*test\x = 4711
*test\y = 100


fuellzwei(*test)

Ohne Delay :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Beitrag von Chimorin »

In etwa so habe ich das auch gemacht. Mein Code sieht aber nun mal so aus:

Code: Alles auswählen

For bla
 for bla
  CreateThread()
 next
next
Da die Threads ja asynchron laufen, haben viele falsche Zahlen bekommen. Da ändert auch dein FreeMemory() nichts, was den Unterschied zu meinem Programm bringt :D
Bild

- formerly known as Bananenfreak -
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Beitrag von KeyKon »

Wenn du in deiner For-Schleife für jeden Thread einen neuen Speicherbereich erstellst (den der Thread dann natürlich löschen sollte wenn er fertig ist) sollte es eigentlich keine Probleme geben.
(\/) (°,,,°) (\/)
Antworten