一个WHILE循环,里面会压缩文件,传输文件,解压文件,还一些逻辑操作,我怎么确定是哪块占CPU啊???CPU很高现在

解决方案 »

  1.   

    按Ctrl+F10执行到while处,按F10逐步调试,监视CPU状态
      

  2.   

    现在我在循环中加了Sleep(5); 怎么CPU没下来啊???
      

  3.   

    那如果测出是某一块的问题,我怎么解决能降低CPU?
    我在线程里再开线程跑占CPU的操作会起到作用吗???
      

  4.   

    占cpu是程序本身的问题,多线程不能解决它
    得看有没有更好的算法
      

  5.   

    to:maxx 
    现在我在循环中加了Sleep(5);   怎么CPU没下来啊???
    ------------------------------------------------
    Sleep(5)只是延时5毫秒,cpu下来你也感觉不到的。
    Sleep()的参数是毫秒,要延时5秒得用Sleep(5000)
      

  6.   

    各个位置加上GetTickCount()来取时间,然后把这次的时间减去上次的时间得到差值,并用OutputDedugString打印出来,多次运行,看看哪一段耗时最长,最长的那一段,通常来说最费CPU(除非它里面有Sleep等挂起线程的函数)。
      

  7.   

    to alxen:
    我知道Sleep是毫秒,可是延时太长会影响执行效率!
      

  8.   

    如果代码上没有什么问题的话,相比,压缩/上传/解压,这三个功能当中压缩应该是最耗CPU时间的。
      

  9.   

    to unsigned:
    那有什么方法降下来吗?因为我调的是一个压缩的接口,压缩算法我是变不了了!从外部有什么方法可以降下来吗?
      

  10.   

    呵呵,在一段疑似死循环中,CPU的使用率其实跟你Sleep的时间有很大的关系,看下面这段:
    {
    int i = 0;
    while(1)
    {
    i++;
    //Sleep(1);
    }
    }
    如果没有那个Sleep(1),那么使用率100%,加上Sleep(1),CPU使用率0%,原因很简单,因为i++可能1us都不用,但Sleep(1)是1ms,差了好几个数量级,对于每一次循环,线程在Sleep的时间要远大于工作的时间,使用率自然降到0了。
    如果把这里的i++换成func()这样的一个函数,如果执行func需要10us,那么CPU使用率依然是0%,但如果func需要100ms,毫无疑问CPU使用率必然飙到100%。
    如果不知道func()需要多少时间,但要求CPU使用率不超过50%,那么可以这样:
    {
    while(1)
    {
    DWORD tm = ::GetTicketCount();
    func();
    tm = ::GetTicketCount() - tm;
    Sleep(tm);
    }
    }
    也就是执行多少时间,就休息多少时间……
      

  11.   

    谢谢楼上的朋友,果然是这样,我说Sleep怎么不管用呢,哈哈!
    只不过降低CPU的代价是要延长时间!