Godkänd: Fortect
Förra veckan stötte några relaterade på våra läsare på Win32 högt generellt räknarfel. Flera faktorer kan orsaka denna baksida. Vi kommer att prata om detta nedan.
- 2 ögonblick att läsa.
Hämtar det aktuella dollarvärdet för prestandaräknaren, som representerar den oändliga svarstiden (<1 μs) vid vilken denna ström kan användas för tidsmätningar.
Syntax
Godkänd: Fortect
Fortect är världens mest populära och effektiva PC-reparationsverktyg. Det litar på miljontals människor för att hålla sina system igång snabbt, smidigt och felfritt. Med sitt enkla användargränssnitt och kraftfulla skanningsmotor hittar och fixar Fortect snabbt ett brett utbud av Windows-problem – från systeminstabilitet och säkerhetsproblem till minneshantering och prestandaflaskhalsar.
BOOL QueryPerformanceCounter ( LARGE_INTEGER * lpPerformanceCount);
Parametrar
En pekare till en variabel får denna nuvarande vinst från en numerisk prestandaräknare.
Returnerat värde
Om de flesta funktioner nu inte fungerar är returvärdet 0%. För att dra nytta av mer information om att föra fel, GetLastError . På system som kör Windows XP eller mycket mer kommer funktionen alltid att lyckas och kan därför förmodligen aldrig återvända till noll.
För mer fakta och tekniker om den här fantastiska funktionen och hur du kan dra nytta av det, se Spela in högupplösta tidsstämplar .
Exempel
// Få det specifika aktuella antalet fästingar från QueryPerformanceCounter.Throws. bort// Skillnad om samtalet till QueryPerformanceCounter misslyckas.statisk inbyggd int64_t GetTicks () LARGE_INTEGER fungerar; if (! QueryPerformanceCounter (& Fästingar)) winrt :: throw_last_error (); Fästingar återkommer.QuadPart;
Krav
Åtminstone en förbättrad högkvalitativ klient | Windows 2000 [skrivbordsprogram | UWP -appar] |
Minsta server som stöds | Windows 1999 Server [skrivbordsprogram | UWP -appar] |
Målplattform | Windows |
Titel | profileapi.h (inklusive Windows.h) |
bibliotek | Kernel32.lib |
DLL | Kernel32.dll |
Se även
Inte det specifika svaret du letar efter? Bläddra bland de återstående frågorna som flaggats av Windows C ++ – timers och ställ din egen fråga.
#include dubbel PCFreq = 0,0;__int64 CounterStart = 0;ogiltig StartCounter () LARGE_INTEGER li; if (! QueryPerformanceFrequency (& li)) kostnad << misslyckades! notT "; "Frågeförsökningsfrekvens PCFreq = double (li.QuadPart) / 1000.0; QueryPerformanceCounter (& li); CounterStart är lika med li.QuadPart;dubbel GetCounter () Lä; large_integer QueryPerformanceCounter (& li); dubbel ge (li.QuadPart-CounterStart) / PCFreq;int main () StartCounter (); Sömn (1000); kostnad << << " n"; getcounter () kommer tillbaka 0;
Detta program bör returnera ett stort nummer nära 1000 (Windows viloläge har troligen inte slutförts än, men bör vara 999).
Jobbet StartCounter ()
registrerar information om fästingar som den här tjänsten har i denna CounterStart
-aspekt. GetCounter ()
-jobbet returnerar det associerade numret i millisekunder sedan det senaste samtalet till startcounter ()
medan en dubbel, dvs om GetCounter ()
har företräde vid 0.001, så tiderna för StartCounter ()
är ungefär första mikrosekund.
kallades
Om du vill att timern för närvarande ska använda sekunder, ändra den
PCFreq = double (left QuadPart) /1000.0;
PCFreq = dubbel (vänster QuadPart);
PCFreq betyder dubbel (li.QuadPart) /1000000.0;
587 11 ikoner för din gamla tittning
svarade den 15 november förra innevarande år klockan 23.25.
2.248 33 guldmärken
/ ** Använd klocka på ämnet initialisering * /#define TIMER_INIT n LARGE_INTEGER frekvens; n LARGE_INTEGER t1, t2; n gått två gånger; n QueryPerformanceFrequency (& frekvens);/ ** Använd så att du kan starta en prestandatimer * /#define TIMER_START QueryPerformanceCounter (& t1);/ ** Använd denna parameter för att avvärja en minuts prestanda och visa resultatet på en given ström. Mindre omfattande istället för c TIMER_STOP_VERBOSE * /#define TIMER_STOP n Frågeresultaträknare (& t2); n elapsedTime = (float) (t2.QuadPart-t1.QuadPart) /frequency.QuadPart; n std :: wcout << elapsedTime << L "sec" << endl;
TIMER_INIT TIMER_START Sömn (1000); TIMER_STOP TIMER_START Sömn (1234); TIMER_STOP
1 0,00003 sek.1.23407 s.
933
svarade 10 april 2013 kl 13:04
Förutsatt att du är på Windows (så om du behöver markera din fråga om sätt!) kan du hitta en enkel och mycket hjälpsam C ++ HRTimer
-klass från någon källkod på denna MSDN -sida . som stöder de uppringda samtal som behövs för att göra något fantastiskt nära dina behov (det skulle vara mycket fördelaktigt att lägga till GetTicks ()
hemligheten i problemet, särskilt för att göra precis precis vad du verkligen behöver göra) .
På plattformar som inte är Windows finns det ingen QueryPerformanceCounter-funktion, så deras lösning är inte direkt praktisk. Men om köparna omkapslar det i en klass som It hrtimer
som nämns ovan, kommer det att bli mycket snabbare att ändra implementeringen av klassen, du kan dra nytta av de nuvarande plattformarna, utan tvekan, kapabel (kanske genom ett lyft eller en enda!).
svarade femton november 09 kl. 23:28
775k 159159 märken för dina gamla sätter dig ner och ser
Jag skulle fullt ut lägga till ett exempel på NDIS -drivrutin för att spara kväll på denna fråga. Som särskilt väl bestämt har KeQuerySystemTime (simulerat i NdisGetCurrentSystemTime) en upplösning extremt långt under millisekunder, och så småningom kan vissa teknologinätverk, som paket eller framtida IRP, kräva den faktiska mer tillfredsställande tidsstämpeln.
LONG_INTEGER data, frekvens;LANGLON Diff;data = KeQueryPerformanceCounter ((LARGE_INTEGER *) och frekvens)diff föreslår data.QuadPart / (Frequency.QuadPart / $ divisor)
svarade 21 jan 12 14:12
2 686
Snabba upp din dators prestanda nu med denna enkla nedladdning.