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

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

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)

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

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:
Da die Threads ja asynchron laufen, haben viele falsche Zahlen bekommen. Da ändert auch dein FreeMemory() nichts, was den Unterschied zu meinem Programm bringt

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.