以编程方式设置应用程序的处理器关联

Posted

技术标签:

【中文标题】以编程方式设置应用程序的处理器关联【英文标题】:Programmatically set the Processor Affinity for an Application 【发布时间】:2015-12-11 05:53:47 【问题描述】:

我们有一个 C++ COM 服务器应用程序,用户可以从中选择和启动他们自己的进程。我想在启动器应用程序中添加“处理器关联集”功能。

客户有一个多 CPU 系统(2 个物理 CPU)。用户将给出物理 CPU 编号,1 或 2。应用程序启动器需要根据用户的输入为其应用程序设置处理器亲和性。如果他们将 CPU 编号设为 2,则从启动器启动的应用程序应使用 CPU 2。

如何计算处理器关联掩码(基于 CPU)?

此启动器应用程序应在 Windows XP 32 位和 Windows7 64 位计算机上运行。此外,处理器类型可能因机器而异(英特尔、AMD 或其他)。

应用程序是作为 COM 服务器 (C++) 开发的。

请给我一个好的解决方案。

【问题讨论】:

... 计算掩码是您唯一卡住的位吗? 你读过the MSDN docs on the SetProcessAffinityMask function? 【参考方案1】:

不确定您的问题是要获取 CPU 数量还是设置它

//To get the CPU
HANDLE hProcess = GetCurrentProcess();
SYSTEM_INFO SystemInfo;
GetSystemInfo(&SystemInfo);
unsigned int nMaxProcessorMask = (1 << SystemInfo.dwNumberOfProcessors) - 1;
// Set the max processor mask
SetProcessAffinityMask(hProcess, nMaxProcessorMask);

【讨论】:

根据 MSDN,进程关联掩码是一个位向量,其中每个位代表一个逻辑处理器,允许在其上运行进程的线程。 根据 MSDN,进程关联掩码是一个位向量,其中每个位代表一个逻辑处理器,允许在其上运行进程的线程。但是我需要将进程关联掩码设置为特定物理 CPU 的逻辑处理器的位向量。即如果机器包含两个物理 CPU(比如 CPU 1 和 CPU 2)。我需要设置位仅代表 CPU 2 的逻辑处理器的关联掩码。

以上是关于以编程方式设置应用程序的处理器关联的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在应用程序图标上设置徽章?

以编程方式检查是不是设置了密码锁

以编程方式更改 Windows 电源设置

如何以编程方式单击 WPF 中的按钮?

以编程方式设置 PopupMenu 菜单项

以编程方式更改任务栏设置?