QueryPerformanceFrequency



  • Warum kommt denn dann Murks bei raus? Solange der Zähler gleichmäßig hochzählt und man die Frequenz des Hochzählens kennt, ist doch alles in Ordnung. Natürlich begrenzt das die Auflösung, aber zumindest ich habe bislang noch kein Timing im 100 Pikosekundenbereich benötigt. Da stellt sich dann sowieso die Frage, ob man in einem nicht-echtzeit OS richtig ist...



  • Decimad schrieb:

    Solange der Zähler gleichmäßig hochzählt und man die Frequenz des Hochzählens kennt, ist doch alles in Ordnung. Natürlich begrenzt das die Auflösung.

    🙄 Das stimmt natürlich, er tickt nur langsamer, und das schränkt eben die Auflösung ein, nicht mehr und nicht weniger.
    Ich weiß nu auch wieso ich verwirrt war. Ich habe mir ein paar Beispiele mit QPC angeschaut, und da haben einige den Rückgabewert von QueryPerformanceFrequency in einer PC_Freq Variable gespeichert. Ich wurde von dem Namen der Variable fehlgeleitet. 😃

    Danke dir. 😉



  • Da meinten die bestimmt PerformanceCounter_Frequency, nicht PersonalComputer_Frequency 😃



  • QueryPerformanceCounter ist ja da um Zeit zu messen.
    Würde QueryPerformanceCounter CPU Ticks zählen wäre das dann ziemlich blöd, weil man auf Grund von SpeedStep und Co. gar nicht weiss wann die CPU mit welchem Takt gelaufen ist, und daher nicht auf die vergangene Zeit zurückrechnen kann.



  • Und sobald man auf einem Multicore Prozessor lauft, wäre es völlig unbrauchbar...



  • Je nach HAL werden unterschiedliche Mechanismen verwendet...



  • Richtig, wer's genauer wissen will, siehe hier...



  • dot schrieb:

    Und sobald man auf einem Multicore Prozessor lauft, wäre es völlig unbrauchbar...

    Der Takt kann sich ändern bei Stromsparereignissen oder Änderung der CPU Taktfrequenz. Daher in jeder Iteration auch QueryPerformanceFrequency neu abfragen !

    Es ist auf einem Multicore Prozessor unbrauchbar, weil jeder Core seinen eigenen Counter hat. Das kann bei einer anderen Zuordnung der Prozesse und Threads zu den Prozessoren zu (unerwarteten) Problemen führen.



  • Das hängt alles davon ab, welchen Counter QeryPerformanceCounter() tatsächlich verwendet. In der Regel wird es eben nicht den Time Stamp Counter der CPU nutzen...



  • Das mit der Taktänderung bei QueryPerformanceFrequency tritt bei meinem Computer: Intel Core 7 mit Windows 7 tatsächlich regelmäßig auf. Anscheinend abhängig davon, ob die Turbo-Technologie aktiviert oder deaktiviert wird.

    Allerdings ist die Frequenz auch deutlich geringer als der CPU Takt.


Anmelden zum Antworten