Sesama Sesame
Sesama Sesame

Reputation: 279

win32 api function to get processor's current speed

I am unaware of a win32 api function/functions used to query the local PC processor's current speed. I wish not to use WMI because it seems unlikely to be feasible on all PCs.

Upvotes: 12

Views: 12183

Answers (4)

Hongfei Shen
Hongfei Shen

Reputation: 163

The frequency obtained by the following method is similar to the CPU speed in the Task Manager

#include <Pdh.h>  // link to Pdh.lib

#define YOUR_CPU_MAX_FREQUENCY 3.3

HQUERY hquery;

// https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhopenquerya
PdhOpenQueryA(nullptr, NULL, &hquery)

HCOUNTER hcounter;

// https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhaddcountera
PdhAddCounterA(hquery, "\\Processor Information(_Total)\\% Processor Performance", NULL, &hcounter)

PdhCollectQueryData(hquery);

Sleep(200);

PdhCollectQueryData(hquery);

PDH_FMT_COUNTERVALUE value;
PdhGetFormattedCounterValue(hcounter, PDH_FMT_DOUBLE, nullptr, &value);

PdhCloseQuery(hquery);

double frequency = value.doubleValue / 100 * YOUR_CPU_MAX_FREQUENCY;

frequency will be a value that changes in real time (in ghz), such as 1.2, 2.6, ...

Upvotes: 0

Jonathan
Jonathan

Reputation: 318

You can call the Windows API function CallNtPowerInformation with the argument ProcessorInformation. It returns a PROCESSOR_POWER_INFORMATION structure which tells you the current and max CPU speed for each of your system's CPUs.

This is only supported on Win32 desktop, not Metro or Windows Phone, though.

Upvotes: 20

IronMensan
IronMensan

Reputation: 6831

You read it from the registry using the usual registry functions

Upvotes: 0

Frerich Raabe
Frerich Raabe

Reputation: 94439

You can (usually) get the processor speed using the QueryPerformanceFrequency function. I'm saying "usually" since this function returns the frequency of the performance timer component of the system, but virtually all current CPU's available operate at the same frequency as the performance timer component.

This function is available since Windows 2000, so chances are good that it's supported on most of todays PCs.

Upvotes: 1

Related Questions