开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 7777|回复: 8
收起左侧

[已解决] 设置进程(线程)在指定的CPU上运行,建议官方添加!

[复制链接]
结帖率:100% (9/9)
发表于 2015-12-14 17:50:06 | 显示全部楼层 |阅读模式   广东省深圳市
本帖最后由 萧阳天 于 2015-12-20 20:13 编辑

今天写的软件在别人那里一运行就出错。还以为多线程代码写错了。找了一个晚上问题,才发现他的电脑是单核的。
实现方法进程与指定cpu绑定:
SetProcessAffinityMask(GetCurrentProcess(),dwMask);
线程与指定cpu绑定:SetThreadAffinityMask(GetCurrentThread(),dwMask);
dwMask为CPU序号的或运算值:1(0001)代表只运行在CPU1,2(0010)代表只运行在CPU2,3(0011)代表可以运行在CPU1和CPU2,以此类推。
设置之前最好判断一下系统有几个CPU:
SYSTEM_INFOSystemInfo;GetSystemInfo(&SystemInfo);
CPU个数:SystemInfo.dwNumberOfProcessors
当前启用的CPU序号:SystemInfo.dwActiveProcessorMask,Mask representing the set of processors configured into the system. Bit 0 is processor 0;
bit 31 is processor 31.
CPU亲缘性介绍按照默认设置,当系统将线程分配给处理器时,Windows使用软亲缘性来进行操作。这意味着如果所有其他因素相同的话,它将设法在它上次运行的那个处理器上运行线程。让线程留在单个处理器上,有助于重复使用仍然在处理器的内存高速缓存中的数据。有一种新的计算机结构,称为NUMA(非统一内存访问),在该结构中,计算机包含若干块插件板,每个插 件板上有4个CPU和它自己的内存区。当CPU访问的内存是它自己的插件板上的内存时,NUMA系统运行的性能最好。如果CPU需要访问位于另一个插件板上的内 存时,就会产生巨大的性能降低。在这样的环境中,就需要限制来自一个进程中的线程在共享同一个插件版的CPU上运行。为了适应这种计算机结构的需要,Windows允许你设置进程和线程的亲缘性。换句话说,你可以控制哪个CPU能够运行某些线程。这称为硬亲缘性。请注意,子进程可以继承进程的亲缘性。注意:(1)无论计算机中实际拥有多少个CPU,Windows98及以前系统只使用一个CPU,上述API不被支持。(2)在大多数环境中,改变线程的亲缘性就会影响调度程序有效地在 各个CPU之间移植线程的能力,而这种能力可以最有效地使用CPU时间。应用场景举例:将UI线程限制在一个CPU,将其他实时性要求较高的线程限制在另一个CPU。这样,当UI需要占用大量CPU时间时,就不会拖累其他实时性要求较高的线程的执行。同样可以将UI线程与一些优先级不高但耗时的异步运算线程设置在不同CPU上,避免UI给人卡顿的感觉。

评分

参与人数 1精币 +1 收起 理由
萧阳天 + 1 感谢你的支持,精易有你更精彩

查看全部评分

结帖率:67% (6/9)
发表于 2021-8-15 00:50:49 | 显示全部楼层   河北省唐山市
379061296 发表于 2016-2-11 14:38
[e=0].版本 2

.子程序 _按钮4_被单击

指定某个线程可以吗
回复 支持 反对

使用道具 举报

结帖率:67% (6/9)
发表于 2021-8-15 00:49:50 | 显示全部楼层   河北省唐山市
379061296 发表于 2016-2-11 14:39
[e=0].版本 2

.子程序 _按钮4_被单击

绑定不上 返回假  怎么解?
回复 支持 反对

使用道具 举报

结帖率:67% (6/9)
发表于 2021-8-15 00:39:18 | 显示全部楼层   河北省唐山市
好东西好东西,这个可以有
回复 支持 反对

使用道具 举报

结帖率:98% (44/45)

签到天数: 14 天

发表于 2019-10-19 06:36:43 | 显示全部楼层   河南省郑州市
插眼
回复 支持 反对

使用道具 举报

发表于 2016-12-24 10:52:11 | 显示全部楼层   浙江省嘉兴市
好,学习一下,感谢!
回复 支持 反对

使用道具 举报

结帖率:90% (18/20)

签到天数: 6 天

发表于 2016-2-11 14:40:05 | 显示全部楼层   广东省*
.版本 2

.子程序 _按钮4_被单击

SetProcessAffinityMask (-1, 左移 (1, 到整数 (取CPU核心数 ()) - 2))  ' ' -2 我的cpu是  4核8线程cpu编号0-7  -2 在任务管理器设置相关性里面 就会显示6号cpu 如果减去1 那就是7号cpu  NUMBER_OF_PROCESSORS 环境变量是显示你多少核心数

.子程序 取CPU核心数, 文本型, 公开

返回 (读环境变量 (“NUMBER_OF_PROCESSORS”))


.版本 2

.DLL命令 SetProcessAffinityMask, 整数型, , , 公开, 设置CPU亲和性  进程句柄  返回CPU号
    .参数 hProcess, 整数型
    .参数 hProcess, 整数型
回复 支持 反对

使用道具 举报

结帖率:90% (18/20)

签到天数: 6 天

发表于 2016-2-11 14:39:35 | 显示全部楼层   广东省*
精易客服 发表于 2015-12-15 18:07
你说的是 精易模块 里面的命令吗?
  
子程序名返回值类型公开备 注
_按钮4_被单击  
SetProcessAffinityMask (-1, 左移 (1, 到整数 (取CPU核心数 ()) - 2)) ' ' -2 我的cpu是 4核8线程cpu编号0-7 -2 在任务管理器设置相关性里面 就会显示6号cpu 如果减去1 那就是7号cpu NUMBER_OF_PROCESSORS 环境变量是显示你多少核心数
子程序名返回值类型公开备 注
取CPU核心数文本型 
返回 (读环境变量 (“NUMBER_OF_PROCESSORS”))


.版本 2

.DLL命令 SetProcessAffinityMask, 整数型, , , 公开, 设置CPU亲和性 进程句柄 返回CPU号
.参数 hProcess, 整数型
.参数 hProcess, 整数型
回复 支持 反对

使用道具 举报

结帖率:90% (18/20)

签到天数: 6 天

发表于 2016-2-11 14:39:02 | 显示全部楼层   广东省*
精易客服 发表于 2015-12-15 18:07
你说的是 精易模块 里面的命令吗?
  
子程序名返回值类型公开备 注
_按钮4_被单击  
SetProcessAffinityMask (-1, 左移 (1, 到整数 (取CPU核心数 ()) - 2)) ' ' -2 我的cpu是 4核8线程cpu编号0-7 -2 在任务管理器设置相关性里面 就会显示6号cpu 如果减去1 那就是7号cpu NUMBER_OF_PROCESSORS 环境变量是显示你多少核心数
子程序名返回值类型公开备 注
取CPU核心数文本型 
返回 (读环境变量 (“NUMBER_OF_PROCESSORS”))


.版本 2

.DLL命令 SetProcessAffinityMask, 整数型, , , 公开, 设置CPU亲和性 进程句柄 返回CPU号
.参数 hProcess, 整数型
.参数 hProcess, 整数型
回复 支持 反对

使用道具 举报

结帖率:90% (18/20)

签到天数: 6 天

发表于 2016-2-11 14:38:37 | 显示全部楼层   广东省*
精易客服 发表于 2015-12-15 18:07
你说的是 精易模块 里面的命令吗?
  
子程序名返回值类型公开备 注
_按钮4_被单击  
SetProcessAffinityMask (-1, 左移 (1, 到整数 (取CPU核心数 ()) - 2)) ' ' -2 我的cpu是 4核8线程cpu编号0-7 -2 在任务管理器设置相关性里面 就会显示6号cpu 如果减去1 那就是7号cpu NUMBER_OF_PROCESSORS 环境变量是显示你多少核心数
子程序名返回值类型公开备 注
取CPU核心数文本型 
返回 (读环境变量 (“NUMBER_OF_PROCESSORS”))
DLL命令名返回值类型公开备 注
SetProcessAffinityMask整数型 设置CPU亲和性 进程句柄 返回CPU号
DLL库文件名:
 
在DLL库中对应命令名:
SetProcessAffinityMask
参数名类 型传址数组备 注
子程序名返回值类型公开备 注
(未填写子程序名)   
参数名类 型参考可空数组备 注
参数名类 型参考可空数组备 注
hProcess整数型
hProcess整数型

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表