7

在 Windows 平台上使用非托管 C++,是否有一种简单的方法来检测我的主机拥有的处理器内核数量?

4

4 回答 4

12

您可以使用GetLogicalProcessorInformation来获取您需要的信息。

预计到达时间:

正如评论者链接到的问题中所述,另一种(更简单)的方法是通过GetSystemInfo:

SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );

numCPU = sysinfo.dwNumberOfProcessors;

似乎 GetLogicalProcessorInformation 会给你更详细的信息,但如果你只需要处理器的数量,GetSystemInfo 可能就可以了。

于 2009-05-18T14:05:45.077 回答
2

我注意到NUMBER_OF_PROCESSORSXP 上有一个环境变量,但我在 Microsoft 的网站上找不到它。不过,我相信这将是最简单的方法。

于 2009-05-18T14:20:32.943 回答
0

查看 GetLogicalProcessorInformation

于 2009-05-18T14:08:06.413 回答
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;
}
于 2013-06-07T10:16:01.887 回答