用SetProcessAffinityMask为进程指定CPU

来源:互联网 发布:java算法优化 编辑:程序博客网 时间:2024/05/16 12:10


The SetProcessAffinityMask function sets a processor affinity mask for the threads of the specified process.


BOOL SetProcessAffinityMask(
  HANDLE hProcess,
  DWORD_PTR dwProcessAffinityMask
);

      //get system info
    SYSTEM_INFO SystemInfo;
    GetSystemInfo(&SystemInfo);

    printf(" "
        "dwNumberOfProcessors=%u, dwActiveProcessorMask=%u, wProcessorLevel=%u, "
        "wProcessorArchitecture=%u, dwPageSize=%u ",
        SystemInfo.dwNumberOfProcessors, SystemInfo.dwActiveProcessorMask, SystemInfo.wProcessorLevel,
        SystemInfo.wProcessorArchitecture,SystemInfo.dwPageSize
        );
    if(SystemInfo.dwNumberOfProcessors <= 1) return;

    DWORD dwMask = 0x0000;
    DWORD dwtmp = 0x0001;
    int nProcessorNum = 0;
    for(int i = 0; i < 32; i++)
    ...{
        if(SystemInfo.dwActiveProcessorMask & dwtmp)
        ...{
            nProcessorNum++;
            if(nProcessorNum <= 2)
            ...{
                //如果系统中有多个处理器,则选择第二个处理器
                dwMask = dwtmp;
            }
            else
            ...{
                break;
            }
        }

        dwtmp *= 2;

    }//end of for

    //进程与指定cpu绑定
    SetProcessAffinityMask(GetCurrentProcess(), dwMask);
    //线程与指定cpu绑定
    //SetThreadAffinityMask(GetCurrentThread(),dwMask);

    return ;

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/baodi_z/archive/2007/10/30/1857820.aspx