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。

它确实假设totalCoresnumberofCores的倍数,所以如果你有16个核心和numberOfCores = 3,你会得到奇怪的结果。

相关文章:
  • 没有找到相关文章