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  ;
 
posted on 2007-10-30 19:21  zdleek  阅读(87)  评论(0)    收藏  举报  来源