WindowEvent() Vs WaitWindowEvent(0)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

WindowEvent() Vs WaitWindowEvent(0)

Beitrag von Regenduft »

Sevuz,

Ich habe ein Prog geschrieben, bei dem man über eine Config den Wert für das Timeout im WaitWindowEvent() festlegen kann, dabei ist mir folgendes aufgefallen:

WindowEvent() ist signifikant langsamer als WaitWindowEvent(0)!

Was hat das zu bedeuten? Denkfehler meinerseits?

Folgenden Code habe ich (bei ausgeschaltetem Debugger) zum Testen verwendet:

Code: Alles auswählen

OpenWindow(0, 100, 100, 100, 100, "Test")

i = 0
start = ElapsedMilliseconds()
Repeat
  If i >= 100000000
    Break
  EndIf
  i + 1
Until WaitWindowEvent(0) = #PB_Event_CloseWindow    ; <- ÄNDERN
;Until WindowEvent() = #PB_Event_CloseWindow

OpenConsole()
Print(Str(ElapsedMilliseconds()-start))
Input()
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
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

Re: WindowEvent() Vs WaitWindowEvent(0)

Beitrag von ts-soft »

Regenduft hat geschrieben:WindowEvent() ist signifikant langsamer als WaitWindowEvent(0)!
maximale Abweichung 1 ms :mrgreen:
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
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

Beitrag von Christian+ »

Seltsam bei mir gibt es ebenfalls Abweichungen zwischen WindowEvent() und WaitWindowEvent(0) habe aber keine Ahnung wieso.
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Re: WindowEvent() Vs WaitWindowEvent(0)

Beitrag von Josef Sniatecki »

ts-soft hat geschrieben:
Regenduft hat geschrieben:WindowEvent() ist signifikant langsamer als WaitWindowEvent(0)!
maximale Abweichung 1 ms :mrgreen:
Sehr signifikant! :mrgreen:

Ich denke mal, dass "WaitWindowEvent" deswegen langsamer ist, weil es
1. den Timeout als Parameter übergeben muss und 2. in WaitWindowEvent
ein Befehl drinn steckt, der zum Timeout dient (denke ich mal). Auch wenn
da jetzt Null als Timeout angegeben wird, müssen halt einige Opcodes mehr
durchgelaufen werden.

EDIT: Oh, habe gerade bemerkt, dass WindowEvent langsamer ist :?
Dann kann ja meine Aussage erst garnicht stimmen :oops:
Zuletzt geändert von Josef Sniatecki am 24.02.2009 14:12, insgesamt 1-mal geändert.
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

bei mir bekomme ich 3.5 sec für WaitWindowEvent(0) und 4.0 sec für WindowEvent(),
für die hundert millionen iterationen im Beispiel.

das macht dann eine halbe Nanosekunde Unterschied pro Aufruf,
für zwei Befehle, die zumindest so unterschiedlich sind,
dass der eine mit und der andere ohne Argument aufgefufen wird,
die sich also zwangsweise in ihrem Algorithmus
und damit in der benötigten Anzahl Taktzyklen Unterscheiden.

also, Fazit der Beobachtung:
Es gibt einen winzigen Unterschied dort, wo ein winziger Unterschied sein muss.

aha...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
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 »

Code: Alles auswählen

OpenConsole()
OpenWindow(0, 100, 100, 100, 100, "Test")
For j = 1 To 3
  i = 0
  start = ElapsedMilliseconds()
  Repeat
    If i >= 100000000
      Break
    EndIf
    i + 1
  Until WindowEvent() = #PB_Event_CloseWindow
  PrintN(Str(ElapsedMilliseconds()-start) + " WindowEvent()")
  i = 0
  start = ElapsedMilliseconds()
  Repeat
    If i >= 100000000
      Break
    EndIf
    i + 1
  Until WaitWindowEvent(0) = #PB_Event_CloseWindow
  PrintN(Str(ElapsedMilliseconds()-start) + " WaitWindowEvent()")
Next

Input()
3063 WindowEvent()
3531 WaitWindowEvent()
2906 WindowEvent()
2782 WaitWindowEvent()
2890 WindowEvent()
2750 WaitWindowEvent()
Der Unterschied hat also nicht viel mit der Funktion zu tun!

// edit
Hab den Testcode mal verbessert, zur Verdeutlichung der unsinnigen Ergebnisse
Zuletzt geändert von ts-soft am 24.02.2009 14:43, insgesamt 3-mal geändert.
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
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

2000 WindowEvent()
1828 WaitWindowEvent()
Umgekehrt:
1813 WaitWindowEvent()
2000 WindowEvent()
Bei mir ist WaitWindowEvent() immer schneller...
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

bei mir auch.
Win11 x64 | PB 6.20
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich hab ts' demo mal mehrfach durchlaufen lassen, ich bekomme immer so ergebnisse wie in meinem eigenen test.

aber es gibt auch noch so faktoren wie speicher-alignment von befehlen, besonders bei schleifensprüngen...
man müßte wohl noch wesentlich unterschiedlichere Testszenarien entwickeln,
bevor man seinen Messwerten das prädikat "aussagekräftig" verleihen kann...


Regenduft hat geschrieben:WindowEvent() ist signifikant langsamer als WaitWindowEvent(0)!

Was hat das zu bedeuten? Denkfehler meinerseits?
ob man bei einer solchen Konstruktion eine Abweichung von 12-14% "signifikant" nennen möchte, darüber könnte man am Stammtisch der Fakultät streiten.... ;)
Kaeru Gaman hat geschrieben:also, Fazit der Beobachtung:
Es gibt einen winzigen Unterschied dort, wo ein winziger Unterschied sein muss.

aha...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Beitrag von Regenduft »

Uff! So viele Antworten! :o

Ich hatte mit einem kurzen [selbstironie]"Du Riesenrind! Hirneinschalten, dann schreiben! Das liegt an...!"[/selbstironie] oder sowas in der Art gerechnet, aber nicht mit sowas! :shock:

*hüst* Ich hätte auch mal nen Systemneustart probieren sollen... jetzt ist es nichtmehr so signifikant. :oops:

Was ich aber immernoch nicht begreife: Ich hätte erwartet das WindowEvent() schneller ist, weil eben (wie andere schon erwähnt haben) kein Parameter übergeben wird. Aber wie ichs dreh und wende: WaitWindowEvent(0) ist schneller. :?

[fremdwortmodus]
Nach dem erbrachten empirischen Beweis muss ich anmerken: Diese exorbitante Divergenz dieser im Nießbrauch nahezu analogen Funktionen frappieren mich, auch wenn in diesem Auditorium Trivialität und Redundanz propagiert werden. Vielleicht ein Resultat meiner Schlaftrunkenheit.
[/fremdwortmodus]

Ich geh dann mal hundertmal "Ich darf keine Worte verwenden die gebildeter klingen als ich bin." schreiben. :freak: :wink:

PS: Nein... bin kein Student und war auch keiner...
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Antworten