原文链接 -> 传送门
函数功能:
GetLogicalProcessorInformationEx 函数用于获取逻辑处理器和相关硬件之间关系的有关信息。
API 函数原型:
注释:_In_ 说明该参数是输入的,_Out_ 说明该参数是输出的,_opt_ 说明该参数是可选的,_Inout_ 说明该参数既是输入又是输出的。
BOOL GetLogicalProcessorInformationEx( _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType, _Out_opt_ PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Buffer, _Inout_ PDWORD ReturnedLength );
参数解析:
|
参数 |
含义 |
||||||||||||||
|
RelationshipType |
1. 获取逻辑处理器和相关硬件之间关系的类型
|
||||||||||||||
|
Buffer |
1. 指向一个缓冲区的指针 |
||||||||||||||
|
ReturnedLength |
1. 在输入方面,该参数指定了 Buffer 指定的缓冲区的字节长度 |
返回值:
1. 如果函数调用成功,则返回值为 TRUE,并且至少有一个 SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX 结构被写入到输出缓冲区;
2. 如果函数调用失败,则返回值为 FALSE。
获取有关错误的更多信息,请调用 GetLastError 函数。
备注:
1. 如果一个运行在 WOW64 下的 32 位进程在具有超过 64 个处理器的系统上调用了该函数,那么一些由该函数返回的处理器的 affinity 掩码可能不正确。这是因为代表所有 64 个处理器的 64 位 KAFFINITY 结构的 DWOED 高序位被折叠成在调用者缓冲区中 32 位 KAFFINITY 结构。因此,处理器 32 到 63 的 affinity 掩码被错误的表示为处理器 0 到 31 的掩码。另外,PROCESSOR_GROUP_INFO 结构中的每个集群的 ActiveProcessorCount 总数和 MaximumProcessorCount 值可能不包括一些活动的逻辑处理器。
2. 但函数以 RelationProcessorCore 关系类型被调用,它会为系统中每个处理器集群中的每个活动的处理器返回一个 PROCESSOR_RELATIONSHIP 结构。这是设计使然,因为一个非 affinity 的 32 位线程可以在给定集群的任何逻辑处理器上运行,包括处理器 32 到 63。32 位调用者可以使用全部的 PROCESSOR_RELATIONSHIP 结构来决定系统中活动处理器实际的核心数。然而,32 位线程的 affinity 不能被明确的设置为任何处理器集群的第 32 到第 63 个逻辑处理器。
3. 编译一个使用了该函数的程序,需要设置 _WIN32_WINNT >= 0x0601。更多信息,请参见 Using the Windows Headers。
需求:
|
Minimum supported client |
Windows 7 [仅桌面应用程序] |
|
Minimum supported server |
Windows Server 2008 R2 [仅桌面应用程序] |
|
Header |
WinBase.h (包含于 Windows.h) |
|
Library |
Kernel32.lib |
|
DLL |
Kernel32.dll |




