PureBoard
https://www.purebasic.fr/german/

Custom Window Library - Beispiel ohne CPU-Auslastung
https://www.purebasic.fr/german/viewtopic.php?f=11&t=6828
Seite 3 von 4

Autor:  Andre [ 22.02.2006 14:40 ]
Betreff des Beitrags: 

Um mal mit PB v4 zu sprechen (schreibe ja gerade die Anleitung dazu), da gibt es WaitWindowEvent() mit einem optionalen Timeout-Parameter.

Als "Vorabdruck" sozusagen hier mal die entsprechenden Passagen aus der aktualisierten Anleitung:

Anleitung PB v4 zu WaitWindowEvent() hat geschrieben:
Ereignis = WaitWindowEvent([Timeout])

Wartet bis ein Ereignis auftritt. Es ist die selbe Funktion wie WindowEvent(), hält aber die Programmausführung an, was sehr wichtig in einer Multitasking Umgebung ist.

Ein optionaler Timeout-Wert (in Millisekunden) kann angegeben werden. Dies veranlasst die Funktion nach einer bestimmten Zeit zur Rückkehr (aus der Wartestellung), wenn keine Ereignisse aufgetreten sind.

Eine Applikation sollte möglichst immer diesen Befehl anstelle von WindowEvent() benutzen. Für weitere Informationen, sehen Sie die Dokumentation zu WindowEvent()

Hinweis: Wenn ein Fenster von einem Thread geöffnet wird, dann muss der Thread auch WindowEvent() oder WaitWindowEvent() in einer Schleife aufrufen, um die Ereignisse für dieses Fenster zu verarbeiten, da Window-Ereignisse nicht zwischen verschiedenen Threads gesendet werden.


Anleitung PB v4 zu WindowEvent() hat geschrieben:
Ereignis = WindowEvent()

Überprüft, ob in irgendeinem der geöffneten Fenster ein Ereignis stattfand.

WindowEvent() gibt das nächste Ereignis aus dem "Ereignis-Queue" (Warteschlange mit Ereignissen) zurück bzw. null, wenn es keine weiteren Ereignisse gibt. Anders als WaitWindowEvent() wartet die Funktion nicht auf das nächste Ereignis - sie kehrt immer sofort zurück.

Dies macht sie nützlich für Ereignisschleifen von Fenstern, wo - ohne dass ein Ereignis auftritt (z.B. bei Network Transaktionen) - andere Prozesse ausgeführt werden müssen und daher WaitWindowEvent() nicht verwendet werden kann.

Sie muss mit Vorsicht benutzt werden, da sie bei fortlaufender Verwendung - anders als WaitWindowEvent() - anderen Programmen während des Wartens auf ein Ereignis keine Rechenzeit zur Verfügung stellt und damit alle CPU-Power verbraucht. In diesem Fall sollte innerhalb der Schleife entweder Delay() oder WaitWindowEvent() mit einem niedrigen Timeout-Wert verwendet werden.

Um die Fenster-Nummer, in dem das Ereignis stattfand, bestimmen zu können, müssen Sie die EventWindow() Funktion benutzen.

Autor:  HeX0R [ 22.02.2006 14:48 ]
Betreff des Beitrags: 

Danke :allright: , aber es erklärt leider immernoch nicht die Vorgehensweise von WaitWindowEvent() hinter den Kulissen.
Hat denn da keiner Insiderwissen ?

Autor:  ts-soft [ 22.02.2006 15:28 ]
Betreff des Beitrags: 

@Andre
Kannste nicht ein paar Deiner Vorabdrücke Online stellen, so gezippte html
oder txt. Wäre sehr Nett, vor allem weil ich denke, das die Betaphase wohl
doch etwas länger dauern wird. Dann gibts auch nicht soviele Bugmeldungen,
die durch mißverstande Funktionen entstehen.

Kann ja auch ein dt. engl. Mischmasch sein :wink:

Autor:  Andre [ 22.02.2006 15:35 ]
Betreff des Beitrags: 

@ts-soft: so schlecht ist die Idee nicht.

Aber diese ist auch mit erhöhtem Aufwand (vom Traffic mal abgesehen) verbunden... :roll:

Falls die Beta-Phase wirklich länger dauert, entscheide ich mich am Wochenende (dann sollten alle wesentlichen Ergänzungen der Hilfe fertig sein) neu. 8)

Autor:  ts-soft [ 22.02.2006 16:04 ]
Betreff des Beitrags: 

@Andre
Wegen dem Traffic, kannste es mir ja schicken, ich stell es dann Online.
Von meinen 30 GB Traffic-Volumen, wird ja gerade mal 1-2 % genutzt :wink:

Autor:  PMV [ 24.02.2006 17:24 ]
Betreff des Beitrags: 

Hex0r hat zwar inzwischen Fred schon gefragt, noch mal danke, aber als
ich dann mir den Befehl angeschaut hab ist mir eingefallen, das Danilo
doch in der FAQ des Forums was gepostet hat, und schwubs ... da war
auch die Antwort /:-> ...

Also das zauberwort ist der API-Befehl GetMessage_(). Näheres im FAQ
Bereich im Thread Wie funktioniert die Messagequeue unter Windows?

MFG PMV

Autor:  ts-soft [ 07.03.2006 01:17 ]
Betreff des Beitrags: 

Andre hat geschrieben:
@ts-soft: so schlecht ist die Idee nicht.

Aber diese ist auch mit erhöhtem Aufwand (vom Traffic mal abgesehen) verbunden... :roll:

Falls die Beta-Phase wirklich länger dauert, entscheide ich mich am Wochenende (dann sollten alle wesentlichen Ergänzungen der Hilfe fertig sein) neu. 8)

Die deutsche Hilfe als Vorabversion ist jetzt erhältlich: http://forums.purebasic.com/german/view ... 9946#79946

Autor:  PMV [ 12.03.2006 21:07 ]
Betreff des Beitrags: 

Danke euch für die Info.

Nachdem nun geklärt ist, wie WaitWindowEvent() arbeitet hab ich das
System der CWL umgestellt und für Anwendungen sinnvoll gemacht. Nun
arbeitet die CWL auch die Event-Queue von Windows ab und gibt diese
zusätzlich zu den CWL-Events zurück.

Da ich allerdings die Animationsmöglichkeit auch für Anwendungen nutzen
möchte hab ich Threads in verwendung. Mit eingeschaltetem Debugger
springt dieser allerdings hin und wieder mit einem "Invalid Memory
access" an. Für die jenigen, die die CWL eventuell später verwenden
möchten, könnte das beim Debuggen relativ nervig werden. Ich hoffe,
dass wenn ich später die PB4.0 verwende, dieses Problem beseitigen
kann. Jetzt würde ich allerdings gern von euch wissen, ob das aktuelle
Beispiel ( 0.58 ) bei euch stabil läuft. Ich hab das Programm 50 mal
gestartet, ohne Fehlermeldung. Ich hoffe das könnt ihr mir nachmachen
:D . Wäre euch zumindest sehr verbunden, wenn ihr das eine oder andere
Duzentmal die EXE starten könntet :D .

Download: http://www.pmv.de.vu/CWL/CWL_Beispiel_0.58.zip

MFG PMV

Autor:  MVXA [ 12.03.2006 21:40 ]
Betreff des Beitrags: 

Hehe, hab nen Schönheits Fehler gefunden. Wenn man das Fenster
maximiert, wird auch die Größe der Taskleiste berücksichtigt, finde
ich gut so. Aber du berücksichtigst nicht ob die Taskleiste eingeklapt
ist oder nicht ;). Sprich, wenn ich Fenster vergrößere und Taskleiste
ist zu, wird die Taskleiste trotzdem von dir in seiner vollen Größe
berücksichtigt.

Autor:  Xaby [ 15.05.2006 07:51 ]
Betreff des Beitrags: 

Testsystem: Windows 2000 V5 SP4
Sempron 2400+
256 MB Ram

FPS: Max 3.000 bei einem Fenster, etwas kleiner gezogen.
FPS: Min 500 bei einem Fenster riesig
FPS: zwischen 380 und 720 bei den drei Fenstern wärend des Verschiebends ohne andere Skalierung

Im Durchschnitt ~ 680


:shock: Also wenn das geht, dass man dein FensterSystem genauso gut unter dem Windows-Desktop wie im Grafik-Spiele-Modus nurtzen kann.

Dann ist es super. Weiter so :allright:

Seite 3 von 4 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/