Aprobado: Fortect
La semana pasada, algunos de nuestros lectores se encontraron normalmente con el error del contador de alto rendimiento de Win32. Varios factores pueden causar este problema. Hablaremos de esto a continuación.
- 2 minutos para leer.
Obtiene el valor actual del contador de rendimiento, que generalmente representa el tiempo de respuesta prolongado (<1 μs) para el que este búfer se puede utilizar para mediciones de tiempo.
Sintaxis
Aprobado: Fortect
Fortect es la herramienta de reparación de PC más popular y eficaz del mundo. Millones de personas confían en él para mantener sus sistemas funcionando de forma rápida, fluida y sin errores. Con su sencilla interfaz de usuario y su potente motor de análisis, Fortect encuentra y soluciona rápidamente una amplia variedad de problemas de Windows, desde la inestabilidad del sistema y los problemas de seguridad hasta la gestión de la memoria y los cuellos de botella en el rendimiento.
BOOL QueryPerformanceCounter ( LARGE_INTEGER * lpPerformanceCount);
Parámetros
Un puntero a una variable convierte este valor actual en un contador de rendimiento numérico.
Valor devuelto
Si la mayoría de las funciones relacionadas no funcionan, el valor de retorno puede ser 0%. Para obtener más información sobre cómo generar algún tipo de error, GetLastError . En sistemas que compiten con Windows XP o más reciente, la función siempre se logrará y, por lo tanto, probablemente nunca regresará a cero.
Para obtener más información sobre esta gran función combinada con cómo usarla, consulte Grabación de marcas de tiempo de definición cada vez mayores .
Ejemplos
// Obtiene el número actual de ticks por QueryPerformanceCounter.Throws. lejos// Diferencia si falla la llamada a QueryPerformanceCounter.static th incorporado int64_t GetTicks () LARGE_INTEGER funciona; una vez (! QueryPerformanceCounter (& Ticks)) winrt :: throw_last_error (); Ticks return.QuadPart;
Requisitos
Véase también
¿No es la respuesta específica que está buscando? Explore las preguntas restantes marcadas por los temporizadores de Windows C ++ y haga su propia pregunta.
#include doble PCFreq = 0.0;__int64 CounterStart = 0;vacío StartCounter () LARGE_INTEGER li; independientemente de si (! QueryPerformanceFrequency (& li)) ejecutar << falló! notT "; "Constancia de ejecución de la consulta PCFreq = double (li.QuadPart) / 1000.0; QueryPerformanceCounter (& li); CounterStart será igual a li.QuadPart;doble GetCounter () Sotavento; large_integer QueryPerformanceCounter (& li); retorno de dos botellas (li.QuadPart-CounterStart) / PCFreq;int main () StartCounter (); Dormir (1000); costo << << " n"; getcounter () devuelve 0;
Este programa debería devolver un número cercano a 800 (la hibernación de Windows aún no ha terminado, pero debería ser muy 999).
La operación StartCounter ()
registra el número de ticks que presenta este servicio en el aspecto CounterStart
. La función GetCounter ()
devuelve el gran número asociado en milisegundos desde la última llamada para startcounter ()
como un doble, es decir, en el caso GetCounter ()
tiene prioridad dentro de 0.001, por lo que el tiempo para StartCounter ()
es probablemente de aproximadamente 1 microsegundo.
se llamó
Si desea que el temporizador utilice segundos, cámbielo
PCFreq = double (QuadPart izquierdo) /1000.0;
PCFreq = double (QuadPart izquierdo);
PCFreq significa doble (li.QuadPart) /1000000.0;
587
Respondió el 15 de noviembre del año pasado a las 11:25 pm.
2.248
/ ** Usar reloj en la inicialización * /#define TIMER_INIT n Frecuencia LARGE_INTEGER; n LARGE_INTEGER t1, t2; n introducido dos veces; n QueryPerformanceFrequency (& frecuencia);/ ** Úselo para iniciar un temporizador de rendimiento (espacio) /#define TIMER_START QueryPerformanceCounter (& t1);/ ** Utilice este parámetro para detener un minuto de rendimiento y mostrar el resultado en una secuencia determinada. Menos detallado que c TIMER_STOP_VERBOSE * /#define TIMER_STOP n Calculadora de rendimiento de consultas (& t2); n elapsedTime equivale a (float) (t2.QuadPart-t1.QuadPart) /frequency.QuadPart; n una enfermedad de transmisión sexual :: wcout << elapsedTime << L "sec" << endl;
TIMER_INIT TIMER_START Dormir (1000); TIMER_STOP TIMER_START Dormir (1234); TIMER_STOP
0,00003 seg.1.23407 s.
933 88 insignias plateadas insignias marrones 2020
satisfecho 10/04/2013 a las 13:04
Suponiendo que puede estar en Windows (¡así que si necesita responder su pregunta de esa manera!), puede encontrar una buena clase C ++ HRTimer
sólida, simple y práctica a partir del código fuente en este Página de MSDN. que admite el conjunto de llamadas necesarias con respecto a hacer algo muy cercano a sus deseos y necesidades (sería útil agregar el método GetTicks ()
al problema, especialmente directamente para hacer exactamente lo que realmente necesita que ayudar a hacer).
En plataformas que no son de Windows, no existe la función QueryPerformanceCounter, por lo que la solución no es directamente agresiva. Sin embargo, si lo vuelve a encapsular en un entrenamiento como It hrtimer
mencionado anteriormente, será más fácil cambiar la implementación involucrada con la clase para aprovechar las Plataformas preexistentes, sin duda, capaz (¡tal vez a través de un impulso o algo más!).
resuelto el 15 de noviembre de 09 a las 11:28 pm
775.000
Definitivamente agregaría un ejemplo de autos NDIS para ahorrar tiempo en esta pregunta. Como era particularmente conocido, KeQuerySystemTime (simulado en NdisGetCurrentSystemTime) presenta una resolución muy por debajo de milisegundos y, eventualmente, muchas redes de tecnología, como paquetes o futuros IRP, pueden requerir una marca de tiempo más satisfactoria;
LONG_INTEGER datos, frecuencia;LANGLON Diff;data = KeQueryPerformanceCounter ((LARGE_INTEGER *) y frecuencia)diff implica datos.QuadPart / (Frequency.QuadPart / buck divisor)
Fuente CompartirCrear 19 ene.
2.686 66 insignias de oro 4040 insignias mágicas 8.484 insignias de bronce
Acelere el rendimiento de su computadora ahora con esta simple descarga.