现在我拿到一份OCX控件的代码,功能主要是开一个线程在http服务器上取图片放到队列中,然后再显示出来,在IE上跑了一个小时左右CPU占用率会提高,现在要解决这个问题,不知道该如何下手,如何分析,不知道有没有工具可用?
只知道for循环很占用CPU。

解决方案 »

  1.   

    打印Log等分析一下代码如何运行
      

  2.   

    线程空转的时候很消耗CPU的资源哈。
    例如线程函数里面
    while(1)
    {
       int i = 0;
    }加上sleep可以降低CPU的资源哈
    while(1)
    {
       int i = 0;
       sleep(0);
    }我估计你那个是已经把图片扫描完了,简单的判断一直在转就很抢CPU资源
      

  3.   

    IO的时候比较耗费CPU
    用户状态和内核状态切换耗费CPU很厉害
      

  4.   

    FOR循环体里加上 sleep(10)吧。
      

  5.   

    while(true)这种语句是非常消耗CPU的。
    但这种方式在线程里是常用的方式。可以sleep(TIME),其中TIME是一个配置的值,这样减少CPU的使用。还有一种方式是Timer,本人不建议使用,Timer本身是多线程的,便是第一个没完第二个又来了,这对CPU对IO压力都很大的。
      

  6.   

    Timer本身是多线程的?不对吧。Timer是把WM_TIMER消息放入消息队列
      

  7.   

    举个例子:多线程通信,读写访问外部文件,比如TXT.
      

  8.   

    搞定了,是GDI的对象忘记释放,导致GDI对象增长(在OnPaint里面,多恐怖啊),所以导致CPU增长的厉害。句柄泄露也能让CPU增长,切记。
      

  9.   

    我更正一下,Timer并非多线程的,切记!