Custom Window Library - Beispiel ohne CPU-Auslastung

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1755
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

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.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
HeX0R
Beiträge: 2959
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Beitrag von HeX0R »

Danke :allright: , aber es erklärt leider immernoch nicht die Vorgehensweise von WaitWindowEvent() hinter den Kulissen.
Hat denn da keiner Insiderwissen ?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

@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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1755
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

@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)
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

@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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

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.
Bild
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

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:
Kinder an die Macht http://scratch.mit.edu/
Antworten