Winapi 正在寻找在32位进程中使用GetProcessAffinityMask解决32 cpu限制的方法

Winapi 正在寻找在32位进程中使用GetProcessAffinityMask解决32 cpu限制的方法,winapi,Winapi,我刚刚意识到,在32位应用程序中,即使在64位系统上,GetProcessAffinityMask也不能返回大于4'294'967'295(1111111111111111111111111111111111)的值 这意味着我无法在具有32个以上逻辑处理器的计算机上正确检测系统关联掩码。在这种情况下,是否有任何黑客可以获得亲和面具的另一半 支持的方法是使用64位进程 如果无法将应用程序转换为64位,请创建并调用一个小型帮助进程来完成此工作,并将信息传递回32位应用程序。即使是在64位进程中(这是

我刚刚意识到,在32位应用程序中,即使在64位系统上,
GetProcessAffinityMask
也不能返回大于4'294'967'295(1111111111111111111111111111111111)的值


这意味着我无法在具有32个以上逻辑处理器的计算机上正确检测系统关联掩码。在这种情况下,是否有任何黑客可以获得亲和面具的另一半

支持的方法是使用64位进程


如果无法将应用程序转换为64位,请创建并调用一个小型帮助进程来完成此工作,并将信息传递回32位应用程序。

即使是在64位进程中(这是解决问题的明显方法),当有超过64个处理器时,也会失败。那么你打算怎么办?@DavidHeffernan,
SetThreadGroupAffinity()
能解决这个问题吗?;)@DavidHeffernan在windows中的最大cpu组大小为64,因此如果您有更多逻辑cpu,则操作系统将创建“伪”numa节点。可能很有趣。是的,我知道,我想知道你是否意识到这个问题。如果您有一个多组进程,则
GetProcessAffinityMask
为两个掩码返回零。我想我真正的观点是,由于这些问题,
GetProcessAffinityMask
在这样的机器上变得不那么有用了。因此,即使您能够成功地获取信息(例如,通过64位进程),也可能对您没有任何真正的好处。当我需要这些信息时,我调用
GetLogicalProcessorInformationEx