Approvato: Fortect
La scorsa settimana, alcuni dei nostri lettori si sono imbattuti in un nuovo errore del contatore ad alte prestazioni Win32. Diversi fattori possono causare questo problema. Parleremo di questo consiglio di seguito.
- 2 minuti per leggere.
Ottiene il valore corrente del contatore delle prestazioni, che rappresenta il tempo di risposta lungo (<1 μs) di cui questo buffer può essere utilizzato per le misurazioni del tempo corretto.
Sintassi
Approvato: Fortect
Fortect è lo strumento di riparazione PC più popolare ed efficace al mondo. Milioni di persone si affidano a milioni di persone per mantenere i loro sistemi in esecuzione veloci, fluidi e privi di errori. Grazie alla sua semplice interfaccia utente e al potente motore di scansione, Fortect trova e risolve rapidamente un'ampia gamma di problemi di Windows, dall'instabilità del sistema e problemi di sicurezza alla gestione della memoria e ai colli di bottiglia delle prestazioni.
BOOL QueryPerformanceCounter ( LARGE_INTEGER * lpPerformanceCount);
Parametri
Un puntatore a una variabile sta diventando questo valore corrente da un punto di vista numerico.
Valore restituito
Se la maggior parte delle funzioni non funziona, il valore restituito è stato 0%. Per ottenere maggiori informazioni sulla generazione di un determinato errore, GetLastError . Sui sistemi con Windows XP o successivi, la funzione darà sempre buoni risultati e quindi probabilmente non restituirà mai zero.
Per ulteriori informazioni su questa fantastica funzionalità e su come utilizzarla, vedere Registrazione di enormi timestamp di definizione .
Esempi
// Ottieni il numero corrente di tick provenienti da QueryPerformanceCounter.Throws. via// Differenza se la chiamata a QueryPerformanceCounter fallisce.static th integrato int64_t GetTicks () LARGE_INTEGER funziona; se o quando (! QueryPerformanceCounter (& Ticks)) winrt :: throw_last_error (); Tick return.QuadPart;
Requisiti
Come minimo , un cliente professionale avanzato | Windows alla fine degli anni ’90 [applicazioni desktop | App UWP] |
Server minimo supportato | Windows 2000 Server [applicazioni desktop | App UWP] |
Piattaforma di destinazione | Finestre |
Titolo | profileapi.h (incluso Windows.h) |
Libreria | Kernel32.lib |
DLL | Kernel32.dll |
Vedi anche
Non è la risposta specifica che stai cercando? Sfoglia le domande rimanenti segnalate dai timer di Windows C ++ e fai la tua domanda.
#include doppia frequenza PC = 0.0;__int64 CounterStart = 0;void ContaInizia () LARGE_INTEGER li; nel caso if (! QueryPerformanceFrequency (& li)) esborso << fallito! nonT "; "occorrenza esecuzione query PCFreq = double (li.QuadPart)/1000.0; QueryPerformanceCounter (& li); CounterStart è senza dubbio uguale a li.QuadPart;doppio GetCounter () Lee; large_integer QueryPerformanceCounter (& li); migliorare il rendimento (li.QuadPart-CounterStart) / PCFreq;intero principale () StartCounter (); Sonno (1000); costo << << " n"; getcounter() restituisce 0;
Questo allenamento dovrebbe restituire un numero vicino a molto (l’ibernazione di Windows non è ancora terminata, ma dovrebbe essere 999).
Il compito StartCounter ()
registra il numero di tick che questo servizio ha nell’aspetto CounterStart
. La funzione GetCounter ()
restituisce la quantità associata in millisecondi dall’ultima chiamata che è tornata a startcounter ()
come double, ovvero in qualsiasi momento GetCounter ()
ha la precedenza all’interno di 0.001, quindi il tempo per StartCounter ()
è sempre stato di circa 1 microsecondo.
è stato chiamato
Se vuoi che il timer utilizzi i secondi, regolalo
PCFreq = double (QuadPart sinistro) /1000.0;
PCFreq = double (QuadPart sinistro);
PCFreq significa double (li.QuadPart) /1000000.0;
587
ha risposto il 15 novembre dello scorso anno alle 23:25.
2.248
/ ** Usa l'orologio all'inizializzazione * /#define TIMER_INIT n LARGE_INTEGER frequenza; n GRANDE_INTERO t1, t2; n morto due volte; n QueryPerformanceFrequency (& frequenza);/ ** Utilizzare per avviare un timer per le prestazioni 4 . /#define TIMER_START QueryPerformanceCounter (& t1);/ ** Usa questo fantastico parametro per fermare un minuto di performance per visualizzare il risultato su un dato stream. Meno prolisso di c TIMER_STOP_VERBOSE * /#define TIMER_STOP n Superficie prestazioni query (& t2); n elapsedTime è uguale a (float) (t2.QuadPart-t1.QuadPart) /frequency.QuadPart; n una malattia a trasmissione sessuale :: wcout << tempo trascorso << L "sec" << endl;
TIMER_INIT TIMER_START Sonno (1000); TIMER_STOP TIMER_START Sonno (1234); TIMER_STOP
intero 0,00003 sec.1.23407 s.
933 88 distintivi argento distintivi marroni 2020
ha risposto il 10 aprile 2013 alle 13:04
Supponendo che tu sia spesso su Windows (quindi se hai bisogno di indirizzare la tua domanda in quel modo!), puoi trovare ogni classe C++ HRTimer
semplice e pratica dal codice sorgente su questa pagina MSDN . che supporta le chiamate impostate necessarie che faranno qualcosa di molto vicino ai tuoi impegni (sarebbe utile aggiungere il metodo GetTicks ()
al problema, specialmente per fare esattamente ciò di cui hai veramente bisogno in modo che sia fare).
Su piattaforme non Windows, non esiste una funzione QueryPerformanceCounter, quindi la soluzione non è direttamente possibile. Tuttavia, se lo reincapsulate in un gruppo come It htimer
menzionato sopra, sarà più facile modificare l’implementazione relativa alla classe per sfruttare le piattaforme appena rilasciate, senza dubbio, capaci (magari attraverso una spinta particolare o qualcos’altro!).
ritirato il 15 novembre 09 alle 23:28
775k 159159 distintivi per il vecchio orologio di un individuo 11721172 distintivi preziosi in argento 13521352 distintivi marroni
Aggiungerei sicuramente un esempio di mazza da golf NDIS per risparmiare tempo su questa domanda. Come si ritiene particolarmente noto, KeQuerySystemTime (simulato in NdisGetCurrentSystemTime) effettua una risoluzione ben al di sotto dei millisecondi, ed eventualmente alcune reti tecnologiche, come i pacchetti o futuri IRP, potrebbero richiedere un timestamp più soddisfacente;
LONG_INTEGER dati, frequenza;LANGLON Diff;data = KeQueryPerformanceCounter ((LARGE_INTEGER *) e frequenza)diff implica data.QuadPart / (Frequency.QuadPart / divisore di denaro)
ha risposto 21 gennaio 12 alle 14:12
2.686 66 distintivi d’oro 4040 distintivi magici 8.484 distintivi di bronzo
Accelera ora le prestazioni del tuo computer con questo semplice download.