Re: Event aussetzen?
Verfasst: 16.08.2010 23:38
Hmmm..., danke.
Kannst du das mal erklären mit deinem Befehlen?
Gruss
Kannst du das mal erklären mit deinem Befehlen?
Gruss
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
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.
Ja.super_castle hat geschrieben:Reicht es wenn man das einmal aufruft am Programmanfang, oder muss es bei jeder Messung neu aufgerufen werden?