Question

Using unmanaged C++ on a Windows platform, is there a simple way to detect the number of processor cores my host machine has?

Was it helpful?

Solution

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.

OTHER TIPS

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.

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;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top