用getthreadtimes()发现,是其中一个线程用户时间疯涨,内核时间基本不变,但我仔细检查了代码,肯定没有死循环,代码结构如下while(true)
{
 sleep(1); 
 readdata();
  service();
}
在cpu100%的情况,这个线程仍然能够继续服务,说明不可能在这上面的伪代码中死循环了,请问这是怎么回事?有没有什么工具能监控具体那些函数用时是多少,好像有这种工具,我记不得了,希望得到大家的帮助.

解决方案 »

  1.   

    while(true)
    {
     sleep(1); 
     readdata();
      service();
    }
    又没看到中断循环的语句,不是死循环是什么?延长Sleep的时间或许可以减少CPU时间
      

  2.   

    to rageliu
    如果死锁了,所有线程都应该睡眠啊,更不应该是cpu100%了
    to orbit:
    肯定不是你说的原因,不信你直接写个
    while(true)
    {
    sleep(1);
    }
    这个一点cpu都不占的
      

  3.   

    我做的一个东东占用率也是100,不过发现是主程序中出现了死循环,而不是线程Sleep时间太短,把主函数中的死循环Sleep一下就可以了。
      

  4.   

    while(true)
    {
    sleep(1);
    }
    这个一点cpu都不占的
    加上readdata();  service();占用率就上来了
    这两个函数干的啥活只有你知道哦???
      
      

  5.   

    如果你是DEBUG版本,并且函数中使用了大量的
    TRACE( )
    或者TRY-CATCH结构,
    是很有可能导致CPU居高不下的,
    不过最大的可能还是死循环,
    可以在SLEEP前加个判断
    外部变量 DWORD dwLoopTimes=0;
    每WHILE循环一次
    dwLoopTimes++
    TRACE(“\r\nLOOP TIMES %u ",dwLoopTimes);
    在你发现CPU资源100%的时候BREAK, 并检查这个变量
      

  6.   

    同意重庆小代的看法
    while(true)
    {
    sleep(1);
    }这里一直都在睡眠,当然不占多少CPU
    如果你的readdata();  service();执行的时间是99ms,那你的CPU占用率不就变成了99%?
      

  7.   

    while(true)
    {
     sleep(1000); 
     readdata();
      service();
    }