您的位置:首页 > 移动开发 > Objective-C

多cpu下SetThreadAffinityMask运用框架

2007-01-31 21:32 295 查看
多cpu下SetThreadAffinityMask运用框架

Author:zfive5(zidong)
Email :zfive5@yahoo.com.cn

“舍”的目的,是为了“得”!

随着多cpu机器的普及时代的到来,大家对机器速度的提升感到欣喜若狂的同时,对cpu的掌控能力越来越差了,也许大家对这块也不是特别注意或感兴趣,但如果真等到需要这方面的答案时,又会无言,例如:

mov eax,1

这条指令在core2的机器上想在cpu1(这里为了区别另一个cpu而给它取的名称罢了)上执行?而不是让操作系统根据它的调度算法去选择1或2,估计大家只能保持沉没!感慨大家现在都让操作系统包装成了高科技的傻子,本着不想让操作系统玩弄鼓掌的态度,我在msdn游荡了数小时,为的是一个api的出现,终于SetThreadAffinityMask出现了,说真的此时的心情就像佛教徒们看到了佛祖猞猁那样!关于SetThreadAffinityMask这个函数的介绍大家可以到msdn去搜!

下面写一个SetThreadAffinityMask框架,大家去以后需要套用即可!

static DWORD WINAPI ZFive5Proc(LPVOID p)
{
   //自己需要控制代码开始
   _asm{
      push eax
      mov eax,1
      pop  eax
    }
  
    sprintf((char*)p,"zfive5! good");
   //自己需要控制代码结束

   return 0;
}

void CCPUDlg::OnOK()
{
 // TODO: Add extra validation here
 
 //CDialog::OnOK();

 char szbuf[200];
 DWORD id;
 HANDLE hHandle=CreateThread(NULL,0,ZFive5Proc,&szbuf,CREATE_SUSPENDED ,&id);
 if(hHandle==NULL)
 {
  AfxMessageBox("zfive5! error");
  return;
 }
 //CPU1
 SetThreadAffinityMask(hHandle,1);
 //CPU2
 //SetThreadAffinityMask(hHandle,2);
 ResumeThread(hHandle); 
 if(WaitForSingleObject(hHandle,INFINITE)!=WAIT_OBJECT_0)
 {
  AfxMessageBox("zfive5! error");
     CloseHandle(hHandle);
  return;
 }

 CloseHandle(hHandle);
 //TRACE("%s/r/n",szbuf);
 AfxMessageBox(szbuf);
 return;

}

这样就可以让线程的代码ZFive5Proc在cpu1上执行了!

写到这里想起了我中熊猫烧香的经历,就是鼠标点了一下跟目录的图标(windows隐藏了autorun.inf运行)!

昨天看kaspersky,发现它的界面是通过贴窗体来实现的!今天在同事的机器上看到macfee,发现界面很一般! 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息