首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SetThreadAffinityMask()似乎不会多次生效

SetThreadAffinityMask()似乎不会多次生效
EN

Stack Overflow用户
提问于 2013-07-26 23:51:39
回答 1查看 436关注 0票数 0

每次按下按钮运行线程时,我都会尝试将线程的亲和性设置为某个掩码。在我第一次打开窗口后,它可以工作,但在那之后就不能工作了。但是,我的OutputDebugString代码生成的输出表明它已被更改。我试过使用CloseHandle(),但似乎没有效果。还有没有别的可能?

代码语言:javascript
复制
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);
    }
}    
EN

回答 1

Stack Overflow用户

发布于 2013-07-27 03:34:27

所以,你想要这样的东西:

代码语言:javascript
复制
 static count = 0;
 DWORD_PTR affinityMask = (static_cast<DWORD_PTR>(1) << NumberOfCores ) - 1;
 affinityMask <<= ((count * numberOfCores)  % totalCores);

这意味着它将在组中的下一组核心上运行,所以如果您在4个核心上运行,第一个tiem,它将在核心0..3,然后4..7,然后8..11上运行。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17885787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档