SetProcessAffinityMask
是 Windows API 中的一个函数,用于设置进程的处理器亲和性掩码。这个函数允许你指定进程应该在哪些 CPU 核心上运行。这在多核处理器系统中非常有用,可以用于优化性能或确保特定任务的隔离。
BOOL WINAPI SetProcessAffinityMask(
_In_ HANDLE hProcess,
_In_ DWORD_PTR dwProcessAffinityMask
);
hProcess
是要设置亲和性的进程的句柄。dwProcessAffinityMask
是一个位掩码,表示进程可以运行的 CPU 核心集合。以下是一个简单的示例,展示如何使用 SetProcessAffinityMask
函数来设置当前进程的亲和性:
#include <windows.h>
#include <iostream>
int main() {
// 获取当前进程的句柄
HANDLE hProcess = GetCurrentProcess();
// 设置亲和性掩码,这里我们假设系统有4个CPU核心
// 0x03 表示核心0和核心1 (二进制: 0011)
DWORD_PTR affinityMask = 0x03;
// 调用SetProcessAffinityMask函数
if (!SetProcessAffinityMask(hProcess, affinityMask)) {
std::cerr << "SetProcessAffinityMask failed with error: " << GetLastError() << std::endl;
return 1;
}
std::cout << "Process affinity mask set successfully." << std::endl;
// 你的代码逻辑...
return 0;
}
SetProcessAffinityMask
之前,确保你有足够的权限。通常,只有具有 SE_TAKE_OWNERSHIP_NAME
或 PROCESS_SET_INFORMATION
权限的用户才能成功调用此函数。SetThreadAffinityMask
函数来实现。SetProcessAffinityMask 函数 (winbase.h) - Microsoft Docs
这个函数在需要精细控制进程在多核处理器上运行分布的场景中非常有用,例如性能敏感的应用程序、实时系统或者需要与其他进程隔离的任务。
领取专属 10元无门槛券
手把手带您无忧上云