Seite 1 von 2

WaitWindowEvent

Verfasst: 07.09.2008 11:47
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 ?

Verfasst: 07.09.2008 14:51
von Kai
Wozu gibt es eine Hilfe, wenn eh niemand reinschaut.

http://www.purearea.net/pb/german/manua ... creen.html

Re: WaitWindowEvent

Verfasst: 07.09.2008 14:58
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().

Verfasst: 07.09.2008 15:19
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.

Verfasst: 07.09.2008 20:24
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.

Verfasst: 08.09.2008 08:48
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.

Verfasst: 08.09.2008 08:55
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.....

Verfasst: 08.09.2008 09:11
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.

Verfasst: 08.09.2008 09:20
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...)

Verfasst: 08.09.2008 09:37
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: