Seite 1 von 1

Variable mit Typ einer Struktur als Parameter in Prozedur

Verfasst: 10.09.2013 12:50
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

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Verfasst: 10.09.2013 13:40
von ts-soft
Nur als Pointer:

Code: Alles auswählen

 EnableExplicit

Structure zwei
  x.i
  y.i
EndStructure

Procedure fuellzwei(*daten.zwei)
EndProcedure 

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Verfasst: 10.09.2013 16:55
von Chimorin
Hrmpf. Das habe ich mir schon irgendwie gedacht.
Dann murkse ich eben mit Stringfield() rum :D

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Verfasst: 10.09.2013 17:04
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:

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Verfasst: 10.09.2013 17:21
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.

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Verfasst: 10.09.2013 17:32
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.

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Verfasst: 10.09.2013 17:55
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.

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Verfasst: 10.09.2013 18:03
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:

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Verfasst: 11.09.2013 08:31
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

Re: Variable mit Typ einer Struktur als Parameter in Prozedu

Verfasst: 11.09.2013 17:24
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.