一个多线程程序, 有时候在应该空闲的时候,cpu占用率过高,
一般在20%~50%波动。
请问如何找出是那个线程导致cpu占用率过高?
有没有一般性的技巧或者工具可以找出问题?

解决方案 »

  1.   

    具体操作,你可以在程序在占有CPU50%或者100的时候,暂停调试,看看程序运行到哪里了。
      

  2.   

    应该是你的线程有空转的现象...
    你是Wait信号量么?
    有种可能是,你的线程函数wait到了信号量,
    但是进去后确什么都没有做...
    导致程序一直空循环....
      

  3.   

    同意楼上
    实在不行,先在线程里加上Sleep语句,可以有一些好转
      

  4.   

    俺一般这样处理if( 有事件 )
    {
        处理
    }
    else
    {
        Sleep( 50 );
    }
      

  5.   

    用GetThreadTimes取各个线程占用CPU的时间来对比。
      

  6.   

    提供个思路:抓dump. 用.time看user time用了多少时间,用!runaway看耗时最多的thread是哪几个,~xs(x是thread id)看那个thread卡在哪了.
      

  7.   

    优化下算法,降低线程优先级。另外,在大循环里用下sleep()可以减少一些CPU占用。
      

  8.   

    Process Explorer真的很好用,
    原来是某个别人写的dll占用CPU,
    与我写的代码没关系。谢谢各位!