2011-09-25 9 views
10

No estoy al tanto de una función api win32/funciones utilizadas para consultar la velocidad actual del procesador de PC local. No deseo usar WMI porque parece poco probable que sea factible en todas las PC.función api win32 para obtener la velocidad actual del procesador

+0

Hola Sesame! Esta pregunta es un poco vaga, pero es de esperar que alguien pueda ayudar. – Coffee

+0

¿A qué versiones de Windows estás apuntando? La disponibilidad de WMI depende solo de la versión de Windows en uso, creo que ... – bdonlan

+0

No hay función de API para hacer esto. Incluso WMI puede dar valores inexactos para la velocidad de reloj del procesador. El mejor programa del que soy consciente para obtener la velocidad del reloj es CPUz. – Mysticial

Respuesta

4

Puede (generalmente) obtener la velocidad del procesador utilizando la función QueryPerformanceFrequency. Estoy diciendo "habitualmente", ya que esta función devuelve la frecuencia del componente del temporizador de rendimiento del sistema, pero prácticamente todas las CPU actuales disponibles operan en la misma frecuencia que el componente del temporizador de rendimiento.

Esta función está disponible desde Windows 2000, por lo que es probable que sea compatible con la mayoría de las PC actuales.

+1

"prácticamente todas las CPU actuales disponibles operan con la misma frecuencia que el componente del temporizador de rendimiento". La [documentación] (https://msdn.microsoft.com/en-ca/library/windows/desktop/dn553408 (v = vs.85) .aspx) afirma: "En muchos casos, QueryPerformanceFrequency devuelve la frecuencia TSC dividida por 1024; y en Hyper-V, la frecuencia del contador de rendimiento es siempre de 10 MHz cuando la máquina virtual invitada se ejecuta bajo un hipervisor que implementa la interfaz del hipervisor versión 1.0 ". Parece que el caso "dividido por 1024" es cierto para mi sistema, en particular. Entonces esto no parece muy confiable :( –

2

Una simple búsqueda en google me llevó al this page, que parece que tiene 2 maneras diferentes de hacer exactamente lo que estás buscando.

+0

Ambos métodos pueden dar velocidades de reloj inexactas. La razón es que todos (en) usan directamente la instrucción 'rdtsc' en el procesador que da ciclos de" pseudo "en lugar de ciclos" reales ". – Mysticial

+0

¿No es la implementación de QueryPerformanceCounter normalmente basada en rdtsc de todos modos? El segundo método parece bastante redundante ... –

10

puede llamar a la función API de Windows CallNtPowerInformation con el ProcessorInformation argumento. Devuelve una estructura PROCESSOR_POWER_INFORMATION que le indica la velocidad de CPU actual y máxima para cada una de las CPU de su sistema.

Esto solo es compatible con el escritorio Win32, no con Metro o Windows Phone.

Cuestiones relacionadas