PBOSL 1.0 (OpenSource Library-Sammlung)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Danke für die (wie immer schnelle) Antwort! Ich hab grade einen HighRes-Timer in Planung... (-> Anfängerforum)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Ich hab grade einen HighRes-Timer in Planung...

den gibt's allerdings schon von Danilo in den PBOSL -> Timer.

Wie Thomas schon schrieb: Schau Dir erstmal an, was alles so in den PBOSL vorhanden ist ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Mein Timer hat eher die Funktion von ElapsedMilliseconds(), aber mit einer VIEL höheren Auflösung (nämlich der Herzzahl des Quarzes, der für den Timer benutzt wird).
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 »

Eine höhere Auflösung, als die des HighResTimers ist meines Wissens nach nur mit zusätzlicher Hardware möglich. Ansonsten gibts dazu auch noch einen PB-Source:

Code: Alles auswählen

; Idea from Erix14 / Djes
; Return the time elapsed between Start & Stop in second
; 0.001 = 1 ms
; 0.000001=1 µs
; Caution ! : If the installed hardware supports a high-resolution performance counter
; MeasureHiResIntervalStart return 1 / 0 if no hardware support 
; Use this functions for measure interval < 1 ms

Global MeasureHiResIntervalTime.l

ProcedureDLL MeasureHiResIntervalStart()
  QueryPerformanceFrequency_(@retour)
  If retour <>0 : retour = 1 : EndIf
  QueryPerformanceCounter_(@MeasureHiResIntervalTime)  
  ProcedureReturn retour
EndProcedure

ProcedureDLL.f MeasureHiResIntervalStop()
  QueryPerformanceCounter_(@Temp)
  Difference=Temp-MeasureHiResIntervalTime
  QueryPerformanceFrequency_(@HiResTimerFrequency)
  Periode.f=1/HiResTimerFrequency
  DureeTotale.f=Difference*Periode
  ProcedureReturn DureeTotale
EndProcedure
Auszug aus Droopy's Lib
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
MARTIN
Beiträge: 454
Registriert: 08.09.2004 14:03
Wohnort: Kiel

Beitrag von MARTIN »

nämlich der Herzzahl des Quarzes, der für den Timer benutzt wird
Ich glaube hardfalcon meint auch einen externen Timer, sonst ist braucht man doch kein Quarz.
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
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 »

Er meint schon den HighResTimer, siehe hier: http://forums.purebasic.com/german/viewtopic.php?t=4625
Bloß der wird ja in der Timer Lib des PBOSL schon verwendet <)
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
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

ts-soft hat Recht bis auf folgenden Punkt:
Das Einsatzgebiet meines Timers. Droopy's/Danilo's Timer können ja nur die Zeit stoppen, die zwischen StartTimer() und StopTimer() vergeht. Mein Timer soll jedoch ein (besserer) Ersatz für ElapsedMilliseconds() werden.
MARTIN
Beiträge: 454
Registriert: 08.09.2004 14:03
Wohnort: Kiel

Beitrag von MARTIN »

Was meinst du dann mit dem "Quarz" ?
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Was, glaubst du wohl, nimmt dein PC als Basis für seinen Timer? Glaubst du, der fragt hinter deinem Rücken per WLan den Funkwecker aufm Schreibtisch ab? :lol:
Natürlich hat dein PC auch ein Quarz (meist sogar mehrere) auf dem Motherboard verlötet. Mach mal den tower auf, und suche auf dem Motherboard nach 4-5mm breiten, 10-20mm langen, ovalförmigen "Weissblechpillen". Das sind die Quarze in deinem PC. Der Timer hat in einem PC noch ganz andere Aufgaben als nur die Zeitberechnung. Z.b. braucht man den Timer auch, um einen Befehl wie "Beep_()" in ASM umzusetzen. Ich bin mir nicht sicher, aber es kann sein, dass der PC sogar die Prozessorgeschwindigkeit mit Hilfe eines Quarzes definiert... :allright:
Benutzeravatar
mueckerich
Beiträge: 220
Registriert: 13.09.2004 11:33
Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad

Beitrag von mueckerich »

mal eine rein technische Frage. :o
Der Quarz (Oszillator) ist der eigentlich der Herzschlag der CPU, alle Aktionen der CPU laufen in diesem Takt, das heißt es gibt Maschinenbefehle die brauchen 1-x Takte um abgearbeitet zu werden. Dieser Takt stellt eigentlich die Zeitbasis (nicht zu verwechseln mit der Zeit des RTC-Bausteins) für dein System dar. Wie willst Du da die Quarzfrequenz sicher ermitteln, wenn die unterschiedlichen ASM Befehle, aus denen Dein Prog besteht, n Taktzyklen zum abarbeiten brauchen. Du kannst auch nicht die Zeit zwischen 2 Takten messen, da du dafür ja einen andere Referenz bräuchtest da die CPU in der Zeit ja nix über die tatsächlich vergangene Zeit mitkriegt. Selbst wenn du die Takte innerhalb einer bestimmten Zeit (Torzeit in de Elektronik genannt) zählen wolltest brauchst du etwas, was schneller rechnet oder eine reine Hardwarelösung. Ich kann meine Takte nicht selbst Zählen, wenn ich für jedes Zählen mehrere Takte benötige. Die Taktfrequenz die Dir die CPU zurückmeldet wird nämlich rein Hardwäremäßig erfasst und ist auch nur so ein "Pi mal Daumen" Wert, die bauen da ja keinen hochgenauen Frequenzzähler für eine menge Kohle ein. Und für einen gnadenlos hochauflösenden Timer ist eine Taktzeitschätzung ja wohl unbrauchbar.
"Wenn Sie glauben, mich verstanden zu haben, dann habe ich mich falsch ausgedrückt" ( Alan Greenspan)
Antworten