Event aussetzen?
-
super_castle
- Beiträge: 557
- Registriert: 29.11.2005 15:05
Re: Event aussetzen?
Hmmm..., danke.
Kannst du das mal erklären mit deinem Befehlen?
Gruss
Kannst du das mal erklären mit deinem Befehlen?
Gruss
Re: Event aussetzen?
Klar, wieso nicht.
Das alles basiert auf einem "high-resolution performance counter", der vom Betriebssystem bzw. der verwendeten Hardware zur Verfügung gestellt wird. Im Grunde funktioniert es in derselben Art, wie deine Lösung mit dem ElapsedMilliseconds().
QueryPerformanceCounter_() wäre hierbei das Equivalent zu ElapsedMilliseconds(). Da aber unter verschiedenen Systemen die einzelnen "Ticks" des Timers unterschiedlich lang sind, gibt es QueryPerformanceFrequency_(), womit du die Anzahl der "Ticks" pro Sekunde erfährst. Deshalb teile ich die Differenz der beiden Zeiten durch die Frequenz und komme somit auf den echten Zeitunterschied.
Alles andere ist im Grunde geblieben, wie du es programmiert hast, bis auf die Goto's, welche nun mittels Break die "große" While-Schleife verlassen (statt deinem Goto ende).
Dein Goto gehe wurde außerdem in ein zweites While verpackt.
Das alles basiert auf einem "high-resolution performance counter", der vom Betriebssystem bzw. der verwendeten Hardware zur Verfügung gestellt wird. Im Grunde funktioniert es in derselben Art, wie deine Lösung mit dem ElapsedMilliseconds().
QueryPerformanceCounter_() wäre hierbei das Equivalent zu ElapsedMilliseconds(). Da aber unter verschiedenen Systemen die einzelnen "Ticks" des Timers unterschiedlich lang sind, gibt es QueryPerformanceFrequency_(), womit du die Anzahl der "Ticks" pro Sekunde erfährst. Deshalb teile ich die Differenz der beiden Zeiten durch die Frequenz und komme somit auf den echten Zeitunterschied.
Alles andere ist im Grunde geblieben, wie du es programmiert hast, bis auf die Goto's, welche nun mittels Break die "große" While-Schleife verlassen (statt deinem Goto ende).
Dein Goto gehe wurde außerdem in ein zweites While verpackt.
-
super_castle
- Beiträge: 557
- Registriert: 29.11.2005 15:05
Re: Event aussetzen?
Ups...hier kommt : Division durch null verboten
Debug "Geschätzt " + StrD(1 / (pixelz * pixelz) * TotalTime, 4) + " pro Sekunde"
Wenn ich hier mit spiele, ändert sich der Zeitablauf nicht:
pixelz = 1.0 / 32000.0
Es rast immer durch , auch wenn ich pixelz verändere.
Gruss
Debug "Geschätzt " + StrD(1 / (pixelz * pixelz) * TotalTime, 4) + " pro Sekunde"
Wenn ich hier mit spiele, ändert sich der Zeitablauf nicht:
pixelz = 1.0 / 32000.0
Es rast immer durch , auch wenn ich pixelz verändere.
Code: Alles auswählen
Global *DC.l,*datspeicher.l,datlaenge.l,xs.l,ys.l,xd.l,yd.l,lauf.l,geladen.l
Global text1.s,text2.s,farbe.c
Define.q frequenz, zeita, zeite
Define.f pixelz, TotalTime
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
Declare erstelle_bild()
Declare lade_datei()
Enumeration
#Window_0
#Button_0
#Button_1
#String_0
#Editor_0
EndEnumeration
Macro HiWord(long)
(long >> 16) & $FFFF
EndMacro
Macro LoWord(long)
long & $FFFF
EndMacro
Procedure lade_datei()
geladen=0
If ReadFile(0, text1+".wav")
datlaenge = Lof(0)
*datspeicher = AllocateMemory(datlaenge)
ReadData(0, *datspeicher, datlaenge)
Else
ProcedureReturn 0
EndIf
CloseFile(0)
geladen=1
EndProcedure
Procedure erstelle_bild()
anfang:
While xs => 0
If QueryPerformanceFrequency_(@frequenz)
While ys => 0
QueryPerformanceCounter_(@zeita)
lauf = lauf + 1
If lauf => datlaenge
Break
EndIf
ys = ys - 1
farbe = PeekB(*datspeicher + lauf)
SetPixel_(*DC, xd + xs, yd + ys, RGB(farbe, farbe, farbe))
QueryPerformanceCounter_(@zeite)
TotalTime = (zeite - zeita) / frequenz
While TotalTime < pixelz
QueryPerformanceCounter_(@zeite)
TotalTime = (zeite - zeita) / frequenz
Wend
Debug "Geschätzt " + StrD(1 / (pixelz * pixelz) * TotalTime, 4) + " pro Sekunde"
Wend
Else
Debug "Ups.. leider keinen high-resolution performance counter gefunden"
EndIf
ys=80
xs=xs-1
Wend
ys=80
xs=31
Goto anfang
ende:
lauf=55
EndProcedure
OpenWindow(#Window_0, 400, 150, 800,500, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
ButtonGadget(#Button_0, 10,10, 80, 25, "Datei laden")
ButtonGadget(#Button_1, 10,40, 80, 25, "Bild erstellen")
StringGadget(#String_0, 10, 100, 100, 20, "")
EditorGadget(#Editor_0, 10, 150, 200,300)
lauf=55
xs=31
ys=80
xd=250
yd=50
pixelz = 1.0 / 32000.0
Repeat
Event = WaitWindowEvent()
*DC = GetDC_(WindowID(#Window_0))
Select Event
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
If EventGadget = #Button_0
text1=GetGadgetText(#String_0)
lade_datei()
If geladen=1
text2+"...geladen :"+" "+Str(datlaenge)+" Byte"+Chr(10)
SetGadgetText(#Editor_0, text2)
Else
text2+"...fehler"+Chr(10)
SetGadgetText(#Editor_0, text2)
EndIf
EndIf
If EventGadget = #Button_1
If geladen=1
erstelle_bild()
EndIf
EndIf
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
EndSelect
ReleaseDC_(WindowID(0), *DC)
ForEver
Re: Event aussetzen?
GLOBAL statt DEFINE könnte helfen
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
-
super_castle
- Beiträge: 557
- Registriert: 29.11.2005 15:05
Re: Event aussetzen?
Reicht es wenn man das einmal aufruft am Programmanfang, oder muss es bei jeder Messung neu aufgerufen werden?QueryPerformanceFrequency_(), womit du die Anzahl der "Ticks" pro Sekunde erfährst.
Gruss
Re: Event aussetzen?
Ja.super_castle hat geschrieben:Reicht es wenn man das einmal aufruft am Programmanfang, oder muss es bei jeder Messung neu aufgerufen werden?
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Re: Event aussetzen?
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
-
super_castle
- Beiträge: 557
- Registriert: 29.11.2005 15:05
Re: Event aussetzen?
Jup, danke für den Hinweis.
