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);
}
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);
}
解决方案 »
- 关于mfc基础的问题,各位不要笑话小弟
- 时间日期control怎么显示小时分钟呢?
- 大家碰到过这样的情况么
- 程序编译通过,链接出错,请问是什么原因?
- 如何创建一个基类是CRichEditView的视图?
- 请问有谁见过 Runtime error 错误吗?
- 关于删除Access数据库中的纪录的问题
- 在生成文档时,cmyview 派生自ctreeview程序没有问题,但是派生自cview后再将cview改成ctreeview,程序就报ctreeview :base class undefined?
- 请进来看!会者给40分!
- 指针和句柄
- 大家帮我看看这个错误
- 200分哦~ 如何直接使用微软的JS引擎
要不分开来,设1000个为一个循环点比较点?
========
直接加在循环里面
#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几秒才能结束
这样,当用户交互操作的时候,才会处理这个任务。cpu高点也没关系,不会影响用户体验。或者放到辅助线程中。基本也不会影响用户体验。
要不你计算一下,每循环N次,就执行一次Sleep() 不过这样也不是很理想
正如孟子还是什么子说的什么鱼和熊掌不可兼得
{
float fDistance=*(p+i); //编译后只有加法,节约了乘法的时间
float fTemperture=*(p+i+4);
if(fDistance<fTemperture)
{
}
printf("%.8f %.8f\n",fDistance,fTemperture);
}
{
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]);
}
还是CreateThread直接创建线程?
/* 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);
}不知道怎么改进提高速度?