用getthreadtimes()发现,是其中一个线程用户时间疯涨,内核时间基本不变,但我仔细检查了代码,肯定没有死循环,代码结构如下while(true)
{
sleep(1);
readdata();
service();
}
在cpu100%的情况,这个线程仍然能够继续服务,说明不可能在这上面的伪代码中死循环了,请问这是怎么回事?有没有什么工具能监控具体那些函数用时是多少,好像有这种工具,我记不得了,希望得到大家的帮助.
{
sleep(1);
readdata();
service();
}
在cpu100%的情况,这个线程仍然能够继续服务,说明不可能在这上面的伪代码中死循环了,请问这是怎么回事?有没有什么工具能监控具体那些函数用时是多少,好像有这种工具,我记不得了,希望得到大家的帮助.
{
sleep(1);
readdata();
service();
}
又没看到中断循环的语句,不是死循环是什么?延长Sleep的时间或许可以减少CPU时间
如果死锁了,所有线程都应该睡眠啊,更不应该是cpu100%了
to orbit:
肯定不是你说的原因,不信你直接写个
while(true)
{
sleep(1);
}
这个一点cpu都不占的
{
sleep(1);
}
这个一点cpu都不占的
加上readdata(); service();占用率就上来了
这两个函数干的啥活只有你知道哦???
TRACE( )
或者TRY-CATCH结构,
是很有可能导致CPU居高不下的,
不过最大的可能还是死循环,
可以在SLEEP前加个判断
外部变量 DWORD dwLoopTimes=0;
每WHILE循环一次
dwLoopTimes++
TRACE(“\r\nLOOP TIMES %u ",dwLoopTimes);
在你发现CPU资源100%的时候BREAK, 并检查这个变量
while(true)
{
sleep(1);
}这里一直都在睡眠,当然不占多少CPU
如果你的readdata(); service();执行的时间是99ms,那你的CPU占用率不就变成了99%?
{
sleep(1000);
readdata();
service();
}