Problem mit ClearStructure()
-
- Beiträge: 180
- Registriert: 24.09.2010 10:39
Re: Problem mit ClearStructure()
Dass die Handles die von PB_Any kommen diejenigen von Windows sein könnten habe ich auch schon gedacht hab aber nichts dazu gelesen.
Ich hatte beim Gedanken an Geschwindigkeit aber eher daran gedacht dass, wie Hexor sagt, Konstanten direkt fest in den Code geschrieben werden können und nicht erst der Wert einer Variable aus einem Speicher abgerufen werden muss.
Wenn du auf PB_Any setzt nimmst du dann Integer (Warum nicht long) oder Pointer? Ist ein Pointer nicht schneller?
Bei den Handles in Strukturen verstehe ich noch nicht was du meinst. Du meinst du fasst die Handles eines Fensters bzw seiner Gadgets in einer Struktur zusammen und brauchst dann nur die Struktur global setzen oder wie? Oder hast du eine eigene Unterfunktion die alle Handlesachen erledigt und alle anderen Programmteile kommunizieren mit dieser Unterfunktion wenn sie etwas mit den Gadgets usw tun will? Dann braucht nur dieses "Steuerungssprogrammteil" die Handles wissen?
Ich hatte beim Gedanken an Geschwindigkeit aber eher daran gedacht dass, wie Hexor sagt, Konstanten direkt fest in den Code geschrieben werden können und nicht erst der Wert einer Variable aus einem Speicher abgerufen werden muss.
Wenn du auf PB_Any setzt nimmst du dann Integer (Warum nicht long) oder Pointer? Ist ein Pointer nicht schneller?
Bei den Handles in Strukturen verstehe ich noch nicht was du meinst. Du meinst du fasst die Handles eines Fensters bzw seiner Gadgets in einer Struktur zusammen und brauchst dann nur die Struktur global setzen oder wie? Oder hast du eine eigene Unterfunktion die alle Handlesachen erledigt und alle anderen Programmteile kommunizieren mit dieser Unterfunktion wenn sie etwas mit den Gadgets usw tun will? Dann braucht nur dieses "Steuerungssprogrammteil" die Handles wissen?
- 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: Problem mit ClearStructure()
>> Dass die Handles die von PB_Any kommen diejenigen von Windows sein könnten habe ich auch schon gedacht hab aber nichts dazu gelesen.
Weil es auch nicht stimmt!
Alle objekte werden in einer Liste gespeichert, die SimpleList.
Diese Liste ist strukturiert. Bei IDs wird diese eingetragen,
bei #PB_Any der Pointer zum Objekt und nicht das OS-Handle,
deshalb darf die ID auch nicht so groß sein, das sie mit einem
Pointer zu verwechseln ist, aber durchaus weit grösser als 5000.
Ist das Objekt Konstant, nimmt man auch Konstanten, ist das
Objekt dynamisch, nimmt man Variablen. Ist doch ganz einfach.
Fensterobjekte sind meist Konstant, aber Dateiobjekte in einer
Procedure sind eher dynamisch, da wird die Variable ja auch
nur in der Procedure verwandt, stört also auch nicht weiter.
Geschwindigkeitsunterschiede gibt es keine!
Weil es auch nicht stimmt!
Alle objekte werden in einer Liste gespeichert, die SimpleList.
Diese Liste ist strukturiert. Bei IDs wird diese eingetragen,
bei #PB_Any der Pointer zum Objekt und nicht das OS-Handle,
deshalb darf die ID auch nicht so groß sein, das sie mit einem
Pointer zu verwechseln ist, aber durchaus weit grösser als 5000.
Ist das Objekt Konstant, nimmt man auch Konstanten, ist das
Objekt dynamisch, nimmt man Variablen. Ist doch ganz einfach.
Fensterobjekte sind meist Konstant, aber Dateiobjekte in einer
Procedure sind eher dynamisch, da wird die Variable ja auch
nur in der Procedure verwandt, stört also auch nicht weiter.
Geschwindigkeitsunterschiede gibt es keine!
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 180
- Registriert: 24.09.2010 10:39
Re: Problem mit ClearStructure()
Dann hab ich das hier:
Dem Forum fehlt ein Dankebutton...
mißverstanden. Es ist ein Pointer zum Handle des OS. Macht es einen Unterschied diese Handles die wegen PB_Any Pointer sind auch mit einem * davor als Pointer erkennbar zu machen oder ist das egal?Anders ist es bei '#PB_ANY'. Der Wert, der von 'OpenWindow' zurückgegeben wird, wenn man es benutzt, ist meines Wissens¹ schon direkt das OS-Handle.
Dem Forum fehlt ein Dankebutton...

Re: Problem mit ClearStructure()
Nur wenn du zB selber mittels Strukture auf Sachen zugreifen willst.
Wenn du es nur als Wert betrachtest, reicht Integer (.i) (nicht Long).
Wenn du es nur als Wert betrachtest, reicht Integer (.i) (nicht Long).
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
- Beiträge: 180
- Registriert: 24.09.2010 10:39
Re: Problem mit ClearStructure()
Warum eigentlich nicht long? Laut Variablenbeschreibung unterscheidet sich bei Integers die benötigte Byteanzahl zwischen 32bit und 64bit Os. Während long immer 4 Byte braucht braucht integer im 64bit-System 8 Byte. 8Byte braucht es doch aber gar nicht oder?
- 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: Problem mit ClearStructure()
Beweisantritt
Das OS-Handle ist der erste Member der Strukture, darum geht folgendes:

Das OS-Handle ist der erste Member der Strukture, darum geht folgendes:
Code: Alles auswählen
EnableExplicit
Define *objekt.Integer
*objekt = OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 640, 480, "test")
Debug "objektpointer: " + Str(*objekt)
Debug "OS-Handle: " + Str(*objekt\i)
Debug "OS-Handle nochmal: " + Str(WindowID(*objekt))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- 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: Problem mit ClearStructure()
Pointer und Handles sind Integer, da sich Ihre grösse nach der Breite der Register der CPU richtet.SebastianJu2 hat geschrieben:Warum eigentlich nicht long? Laut Variablenbeschreibung unterscheidet sich bei Integers die benötigte Byteanzahl zwischen 32bit und 64bit Os. Während long immer 4 Byte braucht braucht integer im 64bit-System 8 Byte. 8Byte braucht es doch aber gar nicht oder?
Das heißt: Pointer und Handles sind unter x86 4 Byte groß, aber unter x64 8 Byte groß.
Damit man den Source ohne Änderungen als 32-bit oder 64-bit Anwendung kompilieren kann,
sollte man also hierfür Integer nehmen, bzw. sollte man eigentlich überall, wenn nicht unbedingt
was anderes erforderlich ist, Integer nehmen. Nur in Strukturen wo z.B. Long (DWORD) verlangt
werden, da natürlich nicht.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- 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
Re: Problem mit ClearStructure()
Genau, ich habe extra Funktionen (Methoden), die die Objekte kennen und sie manipulieren können und der Rest vom Programm arbeitet dann nur noch mit diesen abstrakten Funktionen. Schau dir dazu besser das hier an: Model View Controller.SebastianJu2 hat geschrieben:Bei den Handles in Strukturen verstehe ich noch nicht was du meinst. Du meinst du fasst die Handles eines Fensters bzw seiner Gadgets in einer Struktur zusammen und brauchst dann nur die Struktur global setzen oder wie? Oder hast du eine eigene Unterfunktion die alle Handlesachen erledigt und alle anderen Programmteile kommunizieren mit dieser Unterfunktion wenn sie etwas mit den Gadgets usw tun will? Dann braucht nur dieses "Steuerungssprogrammteil" die Handles wissen?
-
- Beiträge: 180
- Registriert: 24.09.2010 10:39
Re: Problem mit ClearStructure()
@ts-soft
Gut zu wissen...
Ich hab deinen Code noch mal genommen weil ich mich fragte ob der mögliche Verzicht auf die Funktionen zur Ermittlung der Windows-handle einen Vorteil in der Geschwindigkeit bringt und hab den Code so umgebaut:
Scheinbar gibt es einen kleinen Unterschied... unter 10%. Aber immerhin ein Pluspunkt für die Verwendung von #PB_Any. 
@Nic
Klingt interessant für neue Projekte die alten Code benutzen könnten... Muss ich mir überlegen wenn ich nicht nur ein paar Programme schreibe...
Gut zu wissen...
Ich hab deinen Code noch mal genommen weil ich mich fragte ob der mögliche Verzicht auf die Funktionen zur Ermittlung der Windows-handle einen Vorteil in der Geschwindigkeit bringt und hab den Code so umgebaut:
Code: Alles auswählen
EnableExplicit
Define *objekt.Integer
Define.s string
Define.i starttime,x
*objekt = OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, 640, 480, "test")
Debug "objektpointer: " + Str(*objekt)
Debug "OS-Handle: " + Str(*objekt\i)
starttime = ElapsedMilliseconds()
For x = 0 To 10000000
string = Str(*objekt\i)
Next
Debug Str(ElapsedMilliseconds()-starttime) + "ms"
Debug "OS-Handle nochmal: " + Str(WindowID(*objekt))
starttime = ElapsedMilliseconds()
For x = 0 To 10000000
string = Str(WindowID(*objekt))
Next
Debug Str(ElapsedMilliseconds()-starttime) + "ms"
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

@Nic
Klingt interessant für neue Projekte die alten Code benutzen könnten... Muss ich mir überlegen wenn ich nicht nur ein paar Programme schreibe...
- 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: Problem mit ClearStructure()
Nein, Dein Test sagt überhaupt nichts aus, weil der Debugger an ist! Speedtest mit DebuggerSebastianJu2 hat geschrieben: Scheinbar gibt es einen kleinen Unterschied... unter 10%. Aber immerhin ein Pluspunkt für die Verwendung von #PB_Any.
geben niemals korrekte Ergebnisse!
Es gibt keinen Speed-Unterschied!
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
