MFC 多线程运行过程中如何降低CPU占用率?

Geowin 2008-10-30 12:02:09
在做一个数值计算软件时需要运用多步循环计算,每个循环中的一部分运算用启动多线程的方法来实现并行计算,

最开始是在每一步循环开始的时候用AfxBeginThread() 启动一个线程,在该循环结束时结束线程,结果发现这种方法的耗时比单线程计算还多,估计是每一步循环启动线程需要消耗的时间超过了并行计算节约的时间。

后来是采用在所有循环开始前启动一个线程,并设置一个全局标志量,线程中利用while()函数判断是退出,等待还是执行计算。

...
while(!bExit)//bExit表示退出的全局标志量,由主线程控制
{
if(bStart)//表示并行计算开始的全局标志量,由主线程及辅助线程顺序控制
{
////计算代码
****
////
bStart=false;//计算结束

}
...
这样计算时间倒是减少了,但是CPU的在不需要进行并行计算时的占用率也很高,

有没有其他更好的方法,在不进行并行计算时降低CPU的占用率呢?






}
...全文
570 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Edward 2008-10-31
  • 打赏
  • 举报
回复
用事件吧。具体参考CreateEvent/WaitForSingleObject的用法吧。。。
还有,读文档可能不能解决问题,线程同步很复杂的,就我个人而言,需要N年才可以对自己说“我已经掌握了线程同步了”。
palmax 2008-10-30
  • 打赏
  • 举报
回复
想降低占用,就是让所在线程变成不可调度状态,这样线程就获得不了cpu时间片,自然不会占用cpu了
让线程不可调用的方法可以是 sleep 、waitforsingleobject 等
wltg2001 2008-10-30
  • 打赏
  • 举报
回复
在while(!bExit)中加Sleep
travelty 2008-10-30
  • 打赏
  • 举报
回复
你的时间都花到线程调度上去了!

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧