多cpu下SetThreadAffinityMask运用框架

    技术2022-05-11  75

    多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,发现界面很一般! 


    最新回复(0)