Danilos Highres-Timer-Procedure

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Falko hat geschrieben:Ich würde mich viel lieber über ein optimiertes PB freuen.
Aber anscheinend will man das garnicht.
Bei diesem Beispiel mit dem Timer kommen sie garnicht
drumherum es zu verbessern, da korrektes Timing gerade
für Spiele und viele Multimedia-Anwendungen unbedingt
notwendig ist.
Alternativ könnte man auch in die Hilfe schreiben das PB
nicht zum erstellen von Spielen und Multimedia-Anwendungen
geeignet ist (evtl. noch mit Links zu BlitzBasic, PowerBasic, usw. ;)).
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Beitrag von GPI »

>Ich würde mich viel lieber über ein optimiertes PB freuen.
>Aber anscheinend will man das garnicht.

nein.
Beide Sachen haben ihre Berechtigung.

Der Nachteil von Danilos code ist, das die Priorität des eigenen Prozesses hochgesetzt wird. Und das ist sehr oft einfach nicht gewünscht und kann das Multitasking verlangsamen.
Von einer Idealen Lösung meilenweit entfernt.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
traumatic
Beiträge: 478
Registriert: 27.11.2004 15:42

Beitrag von traumatic »

Danilo hat geschrieben: Alternativ könnte man auch in die Hilfe schreiben das PB
nicht zum erstellen von Spielen und Multimedia-Anwendungen
geeignet ist (evtl. noch mit Links zu BlitzBasic, PowerBasic, usw. ;)).
lol :lol:
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

GPI hat geschrieben:Der Nachteil von Danilos code ist, das die Priorität des eigenen
Prozesses hochgesetzt wird.
ROFLMAO... :lol: :lol:

Ich wußte garnicht das Du so lustig sein kannst, GPI. :D

Der Code ist aus einem Beispiel von mir, wo ich das mit dem
Timing erklärt habe.
Du brauchst also nur die 1 Zeile herausnehmen, wo die
Priorität geändert wird. Ich rechne eig. damit das ein
Programmierer selbst auf sowas kommt - allerdings muß
man dazu den Code verstehen und mal die Doku dazu lesen.

Nochmal für Dich geändert:

Code: Alles auswählen

Procedure InitElapsedMilliseconds()
  Shared _GT_DevCaps.TIMECAPS
  timeGetDevCaps_(_GT_DevCaps,SizeOf(TIMECAPS))
  timeBeginPeriod_(_GT_DevCaps\wPeriodMin)
EndProcedure

Procedure EndElapsedMilliseconds()
  Shared _GT_DevCaps.TIMECAPS
  timeEndPeriod_(_GT_DevCaps\wPeriodMin)
EndProcedure

Procedure GetElapsedMilliseconds()
  ProcedureReturn timeGetTime_()
EndProcedure
Das ganze in eine Timer-Lib, und die Init- und End-Funktion
wird automatisch aufgerufen.

Das Init und End ist absolut notwendig um die kleinstmögliche
Auflösung einzustellen, sonst funktioniert es nicht auf jedem
PC gleich (ich spreche da aus Erfahrung).
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Beitrag von freak »

> Die blöde Ausrede: Steht ja auch in der Hilfe.

Ausrede?
Ich habe ledigilich darauf hingewiesen, warum EllapsedMilliseconds ungenau ist...
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Danilo hat geschrieben:..da korrektes Timing gerade
für Spiele und viele Multimedia-Anwendungen unbedingt
notwendig ist.
Du sagst es. :allright:

Auch für eine korrekte Hardwareansteuerung an externen IC-Schaltungen ist ein korrektes Timing erforderlich. :allright:

MfG Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

freak hat geschrieben:> Die blöde Ausrede: Steht ja auch in der Hilfe.

Ausrede?
Ich habe ledigilich darauf hingewiesen, warum EllapsedMilliseconds ungenau ist...
Nimm's nicht so tragisch :lol: :lol:
Du hast ja Recht damit, das du darauf hingewiesen hast und nicht mehr. :mrgreen:
Wenn's nicht darin gestanden hätte, wäre vielleicht daraus ein BUG geworden, den man sicher optimiert hätte, oder?

PS: Leider kann ich mit einer Hand nicht so schnell tippen, wie ihr antwortet.
Sorry, gib mir Mühe :mrgreen:
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Maurizio555
Beiträge: 53
Registriert: 03.10.2004 10:00
Wohnort: BW

Beitrag von Maurizio555 »

Der Nachteil von Danilos code ist, das die Priorität des eigenen Prozesses hochgesetzt wird. Und das ist sehr oft einfach nicht gewünscht und kann das Multitasking verlangsamen.
Das würde mich auch stören. Während ich ein Action-Spiel spiele, schreibe ich nähmlich gerne Briefe und höre nebenher eine Musik-CD.
@GPI
Sorry, nicht ernst gemeint <)
Mit fernem Wasser läßt sich nicht ein nahes Feuer löschen.
Tsue Hung (525 n.Chr.).
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also mal äährlich:

ich finde es beschämend, das eine funktion,
die den klangvollen namen EllapsedMillisecods() trägt,
etwas anderes zurückliefert, als die genaue zahl der
tatsächlich verstrichenen millisekunden!

als wrapper zu GetTickCount sollte sie einen anderen namen tragen.

die timergeschichten sind ja ein leidiges problem auf dem PC,
schon immer gewesen, aber das ist keine entschuldigung!

ein system-timer sollte einfach und präzise auslesbar sein, grundsätzlich.
aber anscheinend ist ja der PC an sich ein relativ schlechter computer.


kennt sich jemand mit extremo-soundkarten-programmierung aus?

vielleicht könnte man da was auslesen, immerhin gibt es ja sounds mit 44000Hz-samplerate,
die werden doch auch präzise abgespielt.


@danilo

gibt es noch eine holzhammer-methode, wie man direkt zugreifen kann, ohne win-api?
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Dieser Source aus dem AltForum soll laut VB-Programm genau sein und MySekunden liefern.
Ob das Stimmt kann ich leider nicht sagen. Ist aber trotzdem API
Gruß Falko

Code: Alles auswählen

Procedure Delayus(t.l) 
  Structure DLong 
    lowlong.l 
    hilong.l 
  EndStructure 
  DLong=0 
  hitimefreq.DLong 
  QueryPerformanceFrequency_(@hitimefreq) 
  hitimecount1.DLong 
  hitimecount2.DLong 
  QueryPerformanceCounter_(@hitimecount1) 
  Repeat 
    QueryPerformanceCounter_(@hitimecount2) 
  Until Int((hitimecount2\lowlong - hitimecount1\lowlong)/(hitimefreq\lowlong/1000000.0))>=t 
Debug "time in µ: " + Str((hitimecount2\lowlong - hitimecount1\lowlong)/(hitimefreq\lowlong/1000000.0)) 
EndProcedure 

;10Mal Delay abrufen 
For i= 1 To 10 
Delayus(1000) 
Delay(20) 
Next 
End
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten