#PB_Any (-1) ist 100000?

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

mit Any wird das Handle auf das PB-Objekt zurückgegeben, das enthält das Handle auf das API-Objekt.
mit Nummer wird ein internes Array erzeugt, am Index der Nummer steht das PB-Handle.
ImageID(Nummer oder PB-Handle) gibt das API-Handle zurück.

Code: Alles auswählen

Debug "Image 1":
hPB1 = CreateImage( 0, 256, 256 )
Debug hPB1
Debug ImageID(0)
Debug "Image 2":
hPB2 = CreateImage( #PB_Any, 256, 256 )
Debug hPB2
Debug ImageID(hPB2)
> demnach muss es doch möglich sein CreateImage( 100000, 256, 256 ) auszuführen.

möglich grundsätzlich ja, aber ob es sinnvoll ist, einen Table für über 100.000 Objekte anzulegen, bleibt fraglich.
wenn du tatsächlich so viele Objekte hast, ist es eher sinnvoll eine umfassendere Verwaltung selber zu erstellen.


OT:
das ist keine Beleidigung sondern nur verballhorntes Französich: au contrair, mon ami
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Kaeru Gaman hat geschrieben:mit Any wird das Handle auf das PB-Objekt zurückgegeben, das enthält das Handle auf das API-Objekt.
mit Nummer wird ein internes Array erzeugt, am Index der Nummer steht das PB-Handle.
ImageID(Nummer oder PB-Handle) gibt das API-Handle zurück.

Code: Alles auswählen

Debug "Image 1":
hPB1 = CreateImage( 0, 256, 256 )
Debug hPB1
Debug ImageID(0)
Debug "Image 2":
hPB2 = CreateImage( #PB_Any, 256, 256 )
Debug hPB2
Debug ImageID(hPB2)
Ja das ist jetzt schon klar.
Kaeru Gaman hat geschrieben:> demnach muss es doch möglich sein CreateImage( 100000, 256, 256 ) auszuführen.

möglich grundsätzlich ja, aber ob es sinnvoll ist, einen Table für über 100.000 Objekte anzulegen, bleibt fraglich.
wenn du tatsächlich so viele Objekte hast, ist es eher sinnvoll eine umfassendere Verwaltung selber zu erstellen.
Sinnvoll ja, dennoch könnte z.B. eine komplett andere Indexgebung vorhanden sein. Vielleicht fängt die Person grundsätzlich erst ab 100000 an zu zählen weil sie die Sprite Indizes so haben will um eine unnötige Verschiebungen der Indizes zu sparen weil der Index für weitere Berechnungen gebraucht wird.
Kaeru Gaman hat geschrieben:OT:
das ist keine Beleidigung sondern nur verballhorntes Französich: au contrair, mon ami
Trotzdem spricht man mit Leuten nicht in einer Sprache die sie nicht verstehen :-) . Sonst weiß ich ja garnicht wie ich darauf reagieren soll - immerhin stellt dich das über mich.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Vielleicht fängt die Person grundsätzlich erst ab 100000 an zu zählen weil sie die Sprite Indizes so haben will um eine unnötige Verschiebungen der Indizes zu sparen weil der Index für weitere Berechnungen gebraucht wird.
dann muss er aber erst recht einen eigenen Table aufmachen und mit Any arbeiten,
sonst erstellt er automatisch eine Tabelle, die 100000 ungenutze einträge hat.

.... außerdem, ob es nun sinnvoll ist, so viele Objekte oder so hohe Indices zu verwenden...

Es ist auf gar keinen Fall sinnvoll, das Handle, das von Any zurückgegeben wird,
im nächsten Atemzug als Nummer wieder zu verwenden, das ist schlichtweg falsch.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Kaeru Gaman hat geschrieben:
Vielleicht fängt die Person grundsätzlich erst ab 100000 an zu zählen weil sie die Sprite Indizes so haben will um eine unnötige Verschiebungen der Indizes zu sparen weil der Index für weitere Berechnungen gebraucht wird.
dann muss er aber erst recht einen eigenen Table aufmachen und mit Any arbeiten,
sonst erstellt er automatisch eine Tabelle, die 100000 ungenutze einträge hat.

.... außerdem, ob es nun sinnvoll ist, so viele Objekte oder so hohe Indices zu verwenden...

Es ist auf gar keinen Fall sinnvoll, das Handle, das von Any zurückgegeben wird,
im nächsten Atemzug als Nummer wieder zu verwenden, das ist schlichtweg falsch.
Okay, ich wusste nicht, dass PureBasic für Indizes eine Hashtable mit 1 Element pro Container verwendet. Ich dachte das sei ein mitwachsendes Array, aber nicht so mitwachsend, dass es den größten Index nimmt, sondern die Anzahl Indizes.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

das wollte ich ja mit dem code auf der vorigen Seite demonstrieren:
ein Image mit der Nummer 99999 anzulegen, kostet 1600 KB mehr Speicher als das selbe mit #PB_Any.

und zum ursprünglichen Thema:
das Handle, was von Any zurückgeliefert wird, ist keine Nummer,
und sollte deshalb auf gar keinen Fall als solche wiederverwendet werden.

... und ich glaube auch nicht, dass es in dem Tutorial so drin war, da hat Mok bestimmt was verwechselt.
Zuletzt geändert von Kaeru Gaman am 03.09.2009 15:00, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Kaeru Gaman hat geschrieben:das wollte ich ja mit dem code auf der vorigen Seite demonstrieren:
ein Image mit der Nummer 99999 anzulegen, kostet 1600 KB mehr Speicher als das selbe mit #PB_Any.
Ah, das hätte auch die minimale Arraygröße sein können die PureBasic erstmal aufstellt ;-) .
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten