多线程程序 cpu占用率过高

tangtangbaobao 2008-11-02 02:28:21
一个多线程程序, 有时候在应该空闲的时候,cpu占用率过高,
一般在20%~50%波动。
请问如何找出是那个线程导致cpu占用率过高?
有没有一般性的技巧或者工具可以找出问题?
...全文
487 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangtangbaobao 2008-11-04
  • 打赏
  • 举报
回复
Process Explorer真的很好用,
原来是某个别人写的dll占用CPU,
与我写的代码没关系。

谢谢各位!
flymoon99 2008-11-03
  • 打赏
  • 举报
回复
优化下算法,降低线程优先级。另外,在大循环里用下sleep()可以减少一些CPU占用。
维生素CC 2008-11-03
  • 打赏
  • 举报
回复
提供个思路:抓dump. 用.time看user time用了多少时间,用!runaway看耗时最多的thread是哪几个,~xs(x是thread id)看那个thread卡在哪了.
zengkun100 2008-11-02
  • 打赏
  • 举报
回复
用vs生成一个profile
cnzdgs 2008-11-02
  • 打赏
  • 举报
回复
用GetThreadTimes取各个线程占用CPU的时间来对比。
用户 昵称 2008-11-02
  • 打赏
  • 举报
回复
俺一般这样处理

if( 有事件 )
{
处理
}
else
{
Sleep( 50 );
}
WG_Wolf 2008-11-02
  • 打赏
  • 举报
回复
关注,对调试工具和手段一向很迷茫
JonathanS666 2008-11-02
  • 打赏
  • 举报
回复
死循环了,好好找一下吧
rookieme 2008-11-02
  • 打赏
  • 举报
回复
同意楼上
实在不行,先在线程里加上Sleep语句,可以有一些好转
ok208043624 2008-11-02
  • 打赏
  • 举报
回复
应该是你的线程有空转的现象...
你是Wait信号量么?
有种可能是,你的线程函数wait到了信号量,
但是进去后确什么都没有做...
导致程序一直空循环....
蒋晟 2008-11-02
  • 打赏
  • 举报
回复
Process Explorer
miao120550 2008-11-02
  • 打赏
  • 举报
回复
具体操作,你可以在程序在占有CPU50%或者100的时候,暂停调试,看看程序运行到哪里了。
miao120550 2008-11-02
  • 打赏
  • 举报
回复
你找找哪里循环比较多?是不是有死循环?跟程序是否多线程没有直接关系。

15,471

社区成员

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

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