多cpu下SetThreadAffinityMask运用框架

本文介绍如何使用SetThreadAffinityMask函数指定线程在多CPU环境中的执行核心,提供了一个实用的代码框架,使开发者能够精确控制线程的运行位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值