15,471
社区成员
发帖
与我相关
我的任务
分享
#include <windows.h>
#include <malloc.h>
#include <stdio.h>
#include <tchar.h>
typedef BOOL (WINAPI *LPFN_GLPI)(
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,
PDWORD);
int _cdecl _tmain ()
{
BOOL done;
BOOL rc;
DWORD returnLength;
DWORD procCoreCount;
DWORD byteOffset;
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION buffer, ptr;
LPFN_GLPI Glpi;
Glpi = (LPFN_GLPI) GetProcAddress(
GetModuleHandle(TEXT("kernel32")),
"GetLogicalProcessorInformation");
if (NULL == Glpi)
{
_tprintf(
TEXT("GetLogicalProcessorInformation is not supported.\n"));
return (1);
}
done = FALSE;
buffer = NULL;
returnLength = 0;
while (!done)
{
rc = Glpi(buffer, &returnLength);
if (FALSE == rc)
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
if (buffer)
free(buffer);
buffer=(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(
returnLength);
if (NULL == buffer)
{
_tprintf(TEXT("Allocation failure\n"));
return (2);
}
}
else
{
_tprintf(TEXT("Error %d\n"), GetLastError());
return (3);
}
}
else done = TRUE;
}
procCoreCount = 0;
byteOffset = 0;
ptr=buffer;
while (byteOffset < returnLength)
{
switch (ptr->Relationship)
{
case RelationProcessorCore:
procCoreCount++;
break;
default:
break;
}
byteOffset += sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
ptr++;
}
_tprintf(TEXT("Number of active processor cores: %d\n"),
procCoreCount);
free (buffer);
return 0;
}
上面的代码打印结果是Number of active processor cores: 2
但是systeminfo命令显示是一个处理器
任务管理器显示是4个CPU
我到底要相信哪个呢,求指教!#include <windows.h>
#include <malloc.h>
#include <stdio.h>
#include <tchar.h>
typedef BOOL (WINAPI *LPFN_GLPI)(
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,
PDWORD);
int _cdecl _tmain ()
{
BOOL done;
BOOL rc;
DWORD returnLength;
DWORD procCoreCount;
DWORD byteOffset;
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION buffer, ptr;
LPFN_GLPI Glpi;
Glpi = (LPFN_GLPI) GetProcAddress(
GetModuleHandle(TEXT("kernel32")),
"GetLogicalProcessorInformation");
if (NULL == Glpi)
{
_tprintf(
TEXT("GetLogicalProcessorInformation is not supported.\n"));
return (1);
}
done = FALSE;
buffer = NULL;
returnLength = 0;
while (!done)
{
rc = Glpi(buffer, &returnLength);
if (FALSE == rc)
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
if (buffer)
free(buffer);
buffer=(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(
returnLength);
if (NULL == buffer)
{
_tprintf(TEXT("Allocation failure\n"));
return (2);
}
}
else
{
_tprintf(TEXT("Error %d\n"), GetLastError());
return (3);
}
}
else done = TRUE;
}
procCoreCount = 0;
byteOffset = 0;
ptr=buffer;
while (byteOffset < returnLength)
{
switch (ptr->Relationship)
{
case RelationProcessorCore:
procCoreCount++;
break;
default:
break;
}
byteOffset += sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
ptr++;
}
_tprintf(TEXT("Number of active processor cores: %d\n"),
procCoreCount);
free (buffer);
return 0;
}
以上代码来自MSDN