20000条数据循环比较问题,降低CPU使用率100%,提高工作效率
for(unsigned int i=9;i<20000;i++)
{
float fDistance=p[i]);/   
float fTemperture=p[i+4]);
                           if(fDistance<fTemperture)
                            {
                             }
printf("%.8f %.8f\n",fDistance,fTemperture);
}

解决方案 »

  1.   

    这个是真没有办法,实打实的20000次循环啊,开个线程看看,不过,CPU使用率是降不下来的,如果你真要降的话,在里面加Sleep(..)
      

  2.   

    sleep()又如何操作呢?
    要不分开来,设1000个为一个循环点比较点?
      

  3.   

    sleep()又如何操作呢?
    ========
    直接加在循环里面
      

  4.   


    #include <stdio.h>
    #include <windows.h>
    #define GetRandom( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min)) 
    int main()
    {
    int j=0;
    int i=0;
    for(j=0;j<20000;j++)
    {
    i=GetRandom(100,300);
    printf("%d \n",i);
    Sleep(1);
    }
    return 0;
    }可以这样做,但效率太低了,要10几秒才能结束
      

  5.   

    你要效率高,那CPU就要100%了,这是肯定的,不行你开线程吧
      

  6.   

    如果是消息驱动的程序,可以把大任务分散成小任务(如20000条数据比较,可以分散成100组比较)。每个队列低优先级消息(如WM_TIMER)中,或者每个idle中做一个小任务。
    这样,当用户交互操作的时候,才会处理这个任务。cpu高点也没关系,不会影响用户体验。或者放到辅助线程中。基本也不会影响用户体验。
      

  7.   

    sleep可以降低cpu使用率,但是计算时间就会长了
      

  8.   

    开了线程CPU使用率还是降不下来的,要降低CPU使用率,只有加Sleep() ,但是加了Sleep() 效率也会下降
    要不你计算一下,每循环N次,就执行一次Sleep() 不过这样也不是很理想
    正如孟子还是什么子说的什么鱼和熊掌不可兼得
      

  9.   

    这是实打实的20000次循环,想提高效率,就得在代码上下功夫。for(unsigned int i=9;i<20000;i++)
    {
        float fDistance=*(p+i); //编译后只有加法,节约了乘法的时间
        float fTemperture=*(p+i+4);
        if(fDistance<fTemperture)
        {
        }
        printf("%.8f %.8f\n",fDistance,fTemperture);
    }
      

  10.   

    for(unsigned int i=9;i<20000;i++)
    {
    float fDistance=p[i]);/   
    float fTemperture=p[i+4]);
      if(fDistance<fTemperture)
      {
      }
    printf("%.8f %.8f\n",fDistance,fTemperture);
    }你的程序写的有很多不太恰当之处:
    for(unsigned int i=9;i</*20000*/19996;i++)
    {
    //float fDistance=p[i]);
    //float fTemperture=p[i+4]);
    //  if(fDistance<fTemperture)
    if(p[i]<p[i+4])
      {
      }
    //printf("%.8f %.8f\n",fDistance,fTemperture);
    printf("%.8f %.8f\n",p[i],p[i+4]);
    }
      

  11.   

    用事件,信号量,互斥,临界区?
    还是CreateThread直接创建线程?
      

  12.   


    /* 3.  intel little=endian */
    recv(sockConn,recvBuf,300*1024,0);
    PBYTE p=(unsigned char *)recvBuf;//共有320000字节数据循环
    for(unsigned int i=9;i<(*((unsigned int *)&p[0])+4);i+=16)
    {
    float fDistance=*((float*)&p[i]);//距离    intel little=endian
    float fTemperture=*((float*)&p[i+4]);//温度  intel little-endian
    printf("%.8f %.8f\n",fDistance,fTemperture);
    }不知道怎么改进提高速度?