#include <Windows.h>
DWORD CountSetBits(ULONG_PTR bitMask)
{
DWORD LSHIFT = sizeof(ULONG_PTR) * 8 - 1;
DWORD bitSetCount = 0;
ULONG_PTR bitTest = (ULONG_PTR)1 << LSHIFT;
DWORD i;
for (i = 0; i <= LSHIFT; ++i)
{
bitSetCount += ((bitMask & bitTest) ? 1 : 0);
bitTest /= 2;
}
return bitSetCount;
}
VOID GetProcessorCoreCount(PDWORD LogicalProcessorCount, PDWORD ProcessorCoreCount)
{
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION ProcessorInfo;
DWORD ReturnedLength = 0;
*LogicalProcessorCount = 0;
*ProcessorCoreCount = 0;
GetLogicalProcessorInformation(NULL, &ReturnedLength);
ProcessorInfo = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)LocalAlloc(LPTR, ReturnedLength);
GetLogicalProcessorInformation(ProcessorInfo, &ReturnedLength);
for (DWORD i = 0; i < ReturnedLength / sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION); i++)
{
if (ProcessorInfo[i].Relationship == RelationProcessorCore)
{
(*ProcessorCoreCount)++;
*LogicalProcessorCount += CountSetBits(ProcessorInfo[i].ProcessorMask);
}
}
LocalFree(ProcessorInfo);
}
int main()
{
DWORD LogicalProcessorCount, ProcessorCoreCount;
GetProcessorCoreCount(&LogicalProcessorCount, &ProcessorCoreCount);
printf("logical:%d core:%d\n", LogicalProcessorCount, ProcessorCoreCount);
}
获取计算机CPU核心数
由
·
发表回复