Using unmanaged C++ on a Windows platform, is there a simple way to detect the number of processor cores my host machine has?
Asked
Active
Viewed 1.0k times
7
-
5Related question: http://stackoverflow.com/questions/150355 – macbirdie May 18 '09 at 14:10
-
possible duplicate of [Programmatically find the number of cores on a machine](http://stackoverflow.com/questions/150355/programmatically-find-the-number-of-cores-on-a-machine) – sschuberth Feb 25 '15 at 13:13
4 Answers
12
You can use GetLogicalProcessorInformation to get the info you need.
ETA:
As mentioned in the question a commenter linked to, another (easier) way to do it would be via GetSystemInfo:
SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );
numCPU = sysinfo.dwNumberOfProcessors;
Seems like GetLogicalProcessorInformation would give you more detailed info, but if all you need is the number of processors, GetSystemInfo would probably work just fine.

Eric Petroelje
- 59,820
- 9
- 127
- 177
2
I've noticed there's an environment variable NUMBER_OF_PROCESSORS
on XP, but I couldn't find it on Microsoft's site. I believe this would be the easiest way, though.

Bastien Léonard
- 60,478
- 20
- 78
- 95
0
size_t getProcessorCores()
{
DWORD process, system;
if(GetProcessAffinityMask(GetCurrentProcess(), &process, &system))
{
int count = 0;
for(int i = 0; i < 32; i++)
if(system & (1 << i))
count++;
return count;
}
// may be we hav't PROCESS_QUERY_INFORMATION access right
SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );
return sysinfo.dwNumberOfProcessors;
}
size_t getAvailableProcessorCores()
{
DWORD process, system;
if(GetProcessAffinityMask(GetCurrentProcess(), &process, &system))
{
int count = 0;
for(int i = 0; i < 32; i++)
if(process & (1 << i))
count++;
return count;
}
// may be we hav't PROCESS_QUERY_INFORMATION access right
SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );
return sysinfo.dwNumberOfProcessors;
}