SetThreadAffinityMask()似乎不会多次生效
SetThreadAffinityMask() not seeming to take effect more than once
本文关键字:SetThreadAffinityMask 更新时间:2023-10-16
每次运行线程时,我都试图通过按下按钮将线程的关联设置为某个掩码。我打开窗户后第一次这样做会奏效,但之后就不行了。但是,我的OutputDebugString
代码生成的输出表明它已经更改。我试过使用CloseHandle()
,但似乎没有效果。还有别的可能吗?
void CSMPDemoDlg::OnBnClickedButton1()
{
// Start thread
DWORD_PTR affinityMask = (static_cast<DWORD_PTR>(1) << NumberOfCores ) - 1;
HANDLE WorkThreadHandle = CreateThread(NULL, 0, WorkThread, &tp, 0, NULL);
DWORD_PTR z = SetThreadAffinityMask(WorkThreadHandle, affinityMask);
if (z!=0) {
char bb[100];
sprintf_s(bb, 100, "Affinity changed from %d to %d", z, affinityMask);
OutputDebugString(bb);
}
}
所以,你想要这样的东西:
static count = 0;
DWORD_PTR affinityMask = (static_cast<DWORD_PTR>(1) << NumberOfCores ) - 1;
affinityMask <<= ((count * numberOfCores) % totalCores);
这意味着它将在组中的下一组内核上运行,所以如果你在第一个tiem上运行,比如说4个内核,它将在内核0..3上运行,然后是4..7,然后是8..11。
它确实假设totalCores
是numberofCores
的倍数,所以如果你有16个核心和numberOfCores = 3
,你会得到奇怪的结果。
相关文章:
- 没有找到相关文章