WaitWindowEvent

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

WaitWindowEvent

Beitrag von Bisonte »

Hallo.

Nun mal eine absolute Anfängerfrage:

Wenn ich eine Fensteranwendung habe, und

Code: Alles auswählen

Repeat
Event = WindowEvent()
Delay(1)
Until Event = #PB_Event_CloseWindow
mache, werden ja alle "Events" gefressen....

Bei einem zusätzlichem WindowedScreen ist es ja notwendig, das die Schleife
fortgeführt wird (neuzeichnen des Screens usw.)

Dann ist

Code: Alles auswählen

Repeat
Event = WaitWindowEvent(1)
Until Event = #PB_Event_CloseWindow
der oberen Eventabfrage vorzuziehen, so hab ich es hier im Forum gelesen...

Und nun die Frage :

Welche TimeOut Zeit ist denn angemessen ?
Reicht da eine 1 oder sollte man dort einen grösseren Wert wählen ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

Wozu gibt es eine Hilfe, wenn eh niemand reinschaut.

http://www.purearea.net/pb/german/manua ... creen.html
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: WaitWindowEvent

Beitrag von edel »

Bisonte hat geschrieben:Hallo.

Nun mal eine absolute Anfängerfrage:

Wenn ich eine Fensteranwendung habe, und

Code: Alles auswählen

Repeat
Event = WindowEvent()
Delay(1)
Until Event = #PB_Event_CloseWindow
mache, werden ja alle "Events" gefressen....

Bei einem zusätzlichem WindowedScreen ist es ja notwendig, das die Schleife
fortgeführt wird (neuzeichnen des Screens usw.)

Dann ist

Code: Alles auswählen

Repeat
Event = WaitWindowEvent(1)
Until Event = #PB_Event_CloseWindow
der oberen Eventabfrage vorzuziehen, so hab ich es hier im Forum gelesen...

Und nun die Frage :

Welche TimeOut Zeit ist denn angemessen ?
Reicht da eine 1 oder sollte man dort einen grösseren Wert wählen ?

Nein, bei sowas macht peekmessage mehr Sinn, also windowevent().
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Kai hat geschrieben:Wozu gibt es eine Hilfe, wenn eh niemand reinschaut.

http://www.purearea.net/pb/german/manua ... creen.html
Es geht ja eigentlich darum, dass hier so viele meinen, daß WindowEvent
falsch wäre...

Und wenn lieber WaitWindowEvent, was für einen TimeOut man wählen sollte.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Bisonte hat geschrieben:Es geht ja eigentlich darum, dass hier so viele meinen, daß WindowEvent falsch wäre...
jain. du wirfst hier zwei dinge durcheinander.
werden ja alle "Events" gefressen....
definitiv nein!

ein eventfresser ist

Code: Alles auswählen

While WindowEvent() : Wend
oder dementsprechend

Code: Alles auswählen

Repeat : Until Not WindowEvent()
denn hier werden die Events aus der Queue geholt, ohne verarbeitet zu werden.
das ist ein schmutziger trick, um alle Events aus der Queue zu "spülen",
die z.B. während eines Fensteraufbaus auflaufen mit vielen Gadgets mit Vorgabewerten.

bei deinem Beispiel verarbeitest du sie, denn du reagierst ja z.B. auf #PB_Event_CloseWindow

jetzt die zweite sache die du hineinmixt:

in einer Schleife nur WindowEvent() zu verwenden, führt natürlich dazu,
dass die Schleife ständig durchrödelt, auch wenn es keine Events zu verarbeiten gibt.
Alleine durch dein Delay(1) hast du aber schon dafür gesorgt, dass deine CPU nicht zur Bratpfanne wird.

ein WindowEvent() : Delay(X) war die übliche Lösung, bevor es für WaitWindowEvent() ein Timeout gab.
das Timeout hat natürlich den Vorteil, dass bei mehr als einem auflaufenden Event nicht sinnlos gewartet wird,
weshalb die Timeout-Methode eindeutig vorzuziehen ist.
was für einen TimeOut man wählen sollte.
das hängt auch davon ab,
was du in der schleife alles machen willst und welche Framerate du am Ende erreichen willst.

dein Timeout sollte so hoch wie möglich sein, dass es zusammen mit allen
Berechnungen die du noch durchführst in einen Frame deines Games passt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Also selbst ausrechnen bzw. messen, wielange der Code braucht um abgearbeitet zu werden...

Nun gut. Es geht ja bloss um die Verständnisfrage.
Das mit dem "Dirty-Trick" ist mir ja bekannt, aber ich höre selbst ab und
an mal die Frage, daher stell ich sie lieber mal hier, damit alle nachlesen können.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also, ich versteh worums geht....
im moment bin ich zu panne, um das als code darzulegen, aber das ist was grundlegendes was eigentlich ganz einfach is.....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Im Grunde geht es im allgemeinen um Timing bei einem Windowedscreen.

In der Schleife, in der der Screen neugezeichnet wird usw.
Der braucht ja ne Weile, wenn man ein bisschen mehr zu zeichnen hat und
ich war jetzt dabei eine Art Ticker, der z.B. pro Sekunde einen Wert hochzählt zu machen.

Der Ticker selbst ist nicht das Problem, sondern jetzt im speziellen die Event Abfrage. Der User soll ja in der Zeit noch knöppkes drücken und machen und tun, und daher jetzt auch diese doch recht unkonventionelle Frage.

Man könnte ja einen Thread nehmen, werden jetzt einige sagen. Aber diese sind ja Fehleranfällig, besonders wenn viele Variablen dadrin manipuliert werden, also wollt ich das halt in der hauptschleife versuchen in der auch der Screen neugezeichnet werden soll.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ja nee..

wenn du nen frame hast, der mehr als ne hundertsel brauch, dann machste was falsch....

kla is ne gute idee, mal mit zu zählen... kann man was draus machn...

(aber bin ich nich drauf grad, ich hör schon jonny cash... frag mich mogan wieda...)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Naja TileEngine, Massenhaft abfragen.... das dauert wohl nen Tick ;)
und Jonny Cash ist doch nicht schlecht .... I keep a close watch on ..... :lol:
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten