Genehmigt: Fortect
Letzte Woche stießen einige unserer Leser auf einen allgemeinen Win32-Hochleistungszählerfehler. Mehrere Faktoren können dieses Problem verursachen. Wir werden weiter unten über diese Fähigkeit sprechen.
- 2 Minuten zum Lesen.
In diesem Artikel
Ruft den aktuellen Wert des Leistungszählers ab, der die lange Reaktionszeit (<1 μs) darstellt, mit der dieser Puffer für Messungen zur richtigen Zeit verwendet werden kann.
Syntax
Genehmigt: Fortect
Fortect ist das weltweit beliebteste und effektivste PC-Reparaturtool. Millionen von Menschen vertrauen darauf, dass ihre Systeme schnell, reibungslos und fehlerfrei laufen. Mit seiner einfachen Benutzeroberfläche und leistungsstarken Scan-Engine findet und behebt Fortect schnell eine breite Palette von Windows-Problemen - von Systeminstabilität und Sicherheitsproblemen bis hin zu Speicherverwaltung und Leistungsengpässen.
BOOL QueryPerformanceCounter ( LARGE_INTEGER * lpPerformanceCount);
Parameter
Ein Zeiger auf eine Variable bringt diesen aktuellen Wert von einer numerischen Leistungsküchentheke.
Zurückgegebener Wert
Wenn in den meisten Fällen die mit den Funktionen verknüpften Funktionen nicht funktionieren, könnte der Rückgabewert 0% betragen. Um weitere Informationen zum Auslösen von starken Fehlern zu erhalten, GetLastError . Auf Systemen, die auf einem Laufband Windows XP oder neuer laufen, funktioniert die Funktion immer und wird daher wahrscheinlich nie Null zurückgeben.
Weitere Informationen zu dieser großartigen Funktion in Kombination mit ihrer Verwendung finden Sie unter Aufzeichnen von Zeitstempeln mit exzellenter Auflösung .
Beispiele
// Ermittelt die aktuelle Anzahl von Ticks außerhalb von QueryPerformanceCounter.Throws. ein Weg// Unterschied, wenn der Aufruf von QueryPerformanceCounter fehlschlägt.statisches eingebautes int64_t GetTicks () LARGE_INTEGER funktioniert; falls (! QueryPerformanceCounter (& Ticks)) winrt :: throw_last_error (); Zecken return.QuadPart;
Anforderungen
Siehe auch
Nicht die spezifische Antwort, die Sie suchen? Durchsuchen Sie die verbleibenden Fragen, die von Windows C ++ Timern markiert wurden, und stellen Sie Ihre eigene Frage.
#include doppelter PCFreq = 0,0;__int64 CounterStart = 0;void StartCounter () LARGE_INTEGER li; incase (! QueryPerformanceFrequency (& li)) Preisvorstellung << fehlgeschlagen! nichtT"; "Abfrageausführungsabstand PCFreq = double (li.QuadPart) / 1000.0; QueryPerformanceCounter (& li); CounterStart ist normalerweise gleich li.QuadPart;doppelter GetCounter () Lee; large_integer QueryPerformanceCounter (& li); nebeneinander Rückgabe (li.QuadPart-CounterStart) / PCFreq;int main () StartZähler (); Schlaf (1000); Kosten << << " n"; getcounter() gibt 0 zurück;
Diese Plattform sollte eine Zahl nahe 1001 zurückgeben (der Windows-Ruhezustand ist noch nicht beendet, sollte aber automatisch 999 sein).
Das Schreiben StartCounter ()
registriert die Anzahl der Ticks, die dieser Dienst im Aspekt CounterStart
verwendet. Die Funktion GetCounter()
gibt die dazugehörige große Zahl in Millisekunden seit dem letzten Aufruf zurück, um wirklich startcounter()
als Double, dh solange GetCounter ( )
hat Vorrang vor 0,001, sodass die Zeit für StartCounter ()
ungefähr 1 Mikrosekunde beträgt.
wurde aufgerufen
Wenn der Timer Sekunden verwenden soll, variieren Sie ihn
PCFreq = double (linker QuadPart) /1000.0;
PCFreq = double (linker QuadPart);
PCFreq bedeutet double (li.QuadPart)/1000000.0;
587
antwortete am 15. November letzten Jahres um 23:25 Uhr.
2.248
/ ** Uhr bei Initialisierung verwenden * /#define TIMER_INIT n LARGE_INTEGER-Frequenz; n LARGE_INTEGER t1, t2; n zweimal übergeben; n QueryPerformanceFrequency (& Frequenz);/** Zum Starten eines Performance-Timers 6 verwenden. /#define TIMER_START Abfrageleistungszähler (& t1);/ ** Verwenden Sie diesen Parameter, um eine Minute Leistung zu stoppen und das Ergebnis in einem bestimmten Stream anzuzeigen. Weniger ausführlich als c TIMER_STOP_VERBOSE * /#define TIMER_STOP n Leistungskampf abfragen (& t2); n elapsedTime ist gleich (float) (t2.QuadPart-t1.QuadPart) /frequency.QuadPart; n eine sexuell übertragbare Krankheit :: wcout << elapsedTime << L "sec" << endl;
TIMER_INIT TIMER_START Schlaf (1000); TIMER_STOP TIMER_START Schlaf (1234); TIMER_STOP
eine bestimmte 0,00003 Sek.1.23407 s.
933 88 silberne Abzeichen braune Abzeichen 2020
zufrieden 10.04.2013 um 13:04
Angenommen, Sie arbeiten unter Windows (also wenn Sie Ihre Frage so einprägen müssen!), können Sie ab dem Quellcode eine sinnvolle einfache und praktische C ++ HRTimer
Klasse finden diese MSDN-Seite. was die auf dem Markt benötigten Set-Aufrufe unterstützt, um etwas zu tun, das Ihren Erwartungen sehr nahe kommt (es wäre praktisch, die Methode GetTicks ()
zum Problem hinzuzufügen, insbesondere wenn Sie genau das tun, was Sie wirklich brauchen, damit Das wird klappen).
Auf Nicht-Windows-Plattformen gibt es keine QueryPerformanceCounter-Funktion, daher ist die Lösung nicht direkt rational. Wenn Sie es jedoch in einem Rang wie dem oben erwähnten It hrtimer
neu kapseln, ist es auch einfacher, die Implementierung in der Klasse zu ändern, um die neuesten Plattformen zu nutzen, die zweifellos fähig sind ( vielleicht durch diesen Schub oder etwas anderes!).
geklärt 15. November 09 um 23:28 Uhr
775k
Ich würde definitiv einen Beispiel-NDIS-Bustreiber hinzufügen, um bei dieser Frage Zeit zu sparen. Wie besonders bekannt geworden ist, hat KeQuerySystemTime (simuliert in NdisGetCurrentSystemTime) auch eine Auflösung von deutlich unter Millisekunden, und möglicherweise benötigen nur wenige Technologienetzwerke, wie Pakete oder zukünftige IRPs, einen zufriedenstellenderen Zeitstempel;
LONG_INTEGER Daten, Häufigkeit;LANGLON Diff;data = KeQueryPerformanceCounter ((LARGE_INTEGER *) & Häufigkeit)diff impliziert data.QuadPart / (Frequency.QuadPart / usd divisor)
am 7. Januar 12 um 14:12 geantwortet
2.686 66 goldene Abzeichen 4040 magische Abzeichen 8.484 bronzene Abzeichen
Beschleunigen Sie jetzt die Leistung Ihres Computers mit diesem einfachen Download.