OpenWindowedScreen() / OpenScreen() zu langsam

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

OpenWindowedScreen() / OpenScreen() zu langsam

Beitrag von Fluid Byte »

Code: Alles auswählen

; Debugger ausschalten

InitSprite()

OpenWindow(0,0,0,1280,720,"",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)

ElapsedMilliseconds()
OpenWindowedScreen(WindowID(0),0,0,1280,720)
MessageRequester("Time passed",Str(ElapsedMilliseconds()) + " ms")
Ich kriege mit diesem winzigen Testcode fast 0.6 Sekunden Verzögerung. Zieht man meine starke Hardware in Betracht: i7@3.4GHz 8 Kerne, GTX 1070 8GB, 32GB RAM, ist dies doch sehr merkwürdig. Ich habe zwar sehr lange nicht mehr mit PB gearbeitet aber so langsam habe ich diesen Befehl nicht in Erinnerung.

Normaler Overhead oder muss ich mir Sorgen machen? Dies ist Teil eines größeren Programms und man spürt das Lag deutlich bei jedem Start.
Zuletzt geändert von Fluid Byte am 20.06.2017 20:53, insgesamt 1-mal geändert.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: OpenWindowedScreen() / OpenWindowedScreen() zu langsam

Beitrag von _JON_ »

Was soll den der Code für eine Zeit messen?
Also wenn Ich hier den ersten Aufruf von ElapsedMilliseconds() vom 2-ten abziehe sind es 26 ms
und das auf sehr betagter Hardware.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: OpenWindowedScreen() / OpenWindowedScreen() zu langsam

Beitrag von Fluid Byte »

_JON_ hat geschrieben:Was soll den der Code für eine Zeit messen?
Du kriegst 26 ms auf alter Hardware, ich fast 600ms auf einem aktuellen Top-Rig ...

Welche von den beiden Zeiten will ich wohl haben? Ich glaub fest daran dass du selbst drauf kommst ...
_JON_ hat geschrieben:Also wenn Ich hier den ersten Aufruf von ElapsedMilliseconds() vom 2-ten abziehe sind es
und das auf sehr betagter Hardware.
Wieso abziehen? Der erste Aufruf von ElapsedMilliseconds() ist 0, da brauchst du nichts abziehen.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Kiffi
Beiträge: 10442
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: OpenWindowedScreen() / OpenWindowedScreen() zu langsam

Beitrag von Kiffi »

Fluid Byte hat geschrieben:Der erste Aufruf von ElapsedMilliseconds() ist 0, da brauchst du nichts abziehen.
nee, der ist bei mir schon knapp über 200

so passt's:

Code: Alles auswählen

InitSprite()
OpenWindow(0,0,0,1280,720,"",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
z1 = ElapsedMilliseconds()
OpenWindowedScreen(WindowID(0),0,0,1280,720)
z2 = ElapsedMilliseconds()
MessageRequester("Time passed", Str(z2 - z1) + " ms")
"tja" – a German reaction to the apocalypse, Dawn of the Gods, nuclear war, an alien attack or no bread in the house
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: OpenWindowedScreen() / OpenScreen() zu langsam

Beitrag von Fluid Byte »

Der erste Aufruf von ElapsedMilliseconds() ist bei mir 0. Keine Veränderung, fast 600 ms Verzögerung. Das ist im Verhältnis zur Stärke von PB und meiner Hardware brutal viel.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: OpenWindowedScreen() / OpenScreen() zu langsam

Beitrag von _JON_ »

Fluid Byte hat geschrieben:Wieso abziehen? Der erste Aufruf von ElapsedMilliseconds() ist 0, da brauchst du nichts abziehen.
ElapsedMilliseconds() ist ein Counter der beim Start des Betriebssystem anfängt die ms zu zählen.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
ccode_new
Beiträge: 1074
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: OpenWindowedScreen() / OpenScreen() zu langsam

Beitrag von ccode_new »

_JON_ hat geschrieben:ElapsedMilliseconds() ist ein Counter der beim Start des Betriebssystem anfängt die ms zu zählen.
Genau !!! :allright:

Man braucht immer 2 Aufrufe für eine Referenz.
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: OpenWindowedScreen() / OpenScreen() zu langsam

Beitrag von Fluid Byte »

_JON_ hat geschrieben:ElapsedMilliseconds() ist ein Counter der beim Start des Betriebssystem anfängt die ms zu zählen.
Wo hast du denn das Märchen her? Soll ich jetzt zum dritten Mal sagen das ElapsedMilliseconds() 0 ist?
ccode_new hat geschrieben:Genau !!! :allright:
Ja genau, genau falsch.
Windows 10 Pro, 64-Bit / Outtakes | Derek
ccode_new
Beiträge: 1074
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: OpenWindowedScreen() / OpenScreen() zu langsam

Beitrag von ccode_new »

Fluid Byte hat geschrieben:Wo hast du denn das Märchen her? Soll ich jetzt zum dritten Mal sagen das ElapsedMilliseconds() 0 ist?
Schau in die Hilfe !!!!

ElapsedMilliseconds() gibt dir beim ersten Aufruf irgend einen Scheiß wieder.
Das kann auch 0 sein und hat auch nichts mit der Startzeit deines Programms zu tun.

Du brauchst zum Messen immer min. 2 Aufrufe.

Ich denke: "ElapsedMilliseconds() ist ein Counter der beim Start des Betriebssystem anfängt die ms zu zählen."

Stimmt schon, oder auch nicht???

Bin mir nicht ganz sicher.

Aber die Millisekunden werden bei einem Speicherüberlauf einfach wieder bei 0 anfangen.
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: OpenWindowedScreen() / OpenScreen() zu langsam

Beitrag von _JON_ »

Fluid Byte hat geschrieben: Wo hast du denn das Märchen her? Soll ich jetzt zum dritten Mal sagen das ElapsedMilliseconds() 0 ist?
ElapsedMilliseconds() ist ein Wrapper für die GetTickCount_() API GetTickCount MSDN
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Antworten