关闭

正确可以使用的SetThreadAffinityMask

1614人阅读 评论(0) 收藏 举报

void SetCoreMask(short nMask)
{
    SYSTEM_INFO si;
    GetSystemInfo(&si);

    short nValue = 0x0001;
    for (int i=0; i<(si.dwNumberOfProcessors-1); ++i)
    {
        nValue = nValue << 1;
        nValue |= 0x0001;
    }

    if (nMask <= nValue)
        m_nAffinityMask = nMask;
}

bool AttachToCore()
{
    m_dwID = GetCurrentThreadId();
    HANDLE hThread, hThreadDup;
    hThread = GetCurrentThread();
    BOOL bSuccess = DuplicateHandle(GetCurrentProcess(), hThread,
        GetCurrentProcess(), &hThreadDup,
        0, FALSE,
        DUPLICATE_SAME_ACCESS);
    CloseHandle(hThread);

    if (!bSuccess)
        return FALSE;

    m_handle = hThreadDup;
    SetThreadAffinityMask(hThread, m_nAffinityMask);

    return TRUE;
}

 

然后再程序开始的地方(比较靠前的地方)加入:

    SetCoreMask((short)m_CPUCoreNO);
    if(!AttachToCore())
    {
        printf("指定的CPU核心%d有误,程序退出。",m_CPUCoreNO);

        //暂停窗口
        system("pause");

        return 0;
    }

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:43058次
    • 积分:550
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:1篇
    • 译文:0篇
    • 评论:12条
    文章分类
    最新评论