返回信息流PC上一次FOR循环时间怎么计算?
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #11621同步于 2011/12/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
PC上一次FOR循环时间怎么计算?
ttallen
2011/12/21镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
int main(int argc, char *argv[])
{
//...
#ifdef CALCULATE_SPEED
double tmconsume;//second
#ifndef WIN32
struct timeval m_tmstart, m_tmfinish;
#else
LARGE_INTEGER m_tmfreq, m_tmstart, m_tmfinish;
if(!QueryPerformanceFrequency(&m_tmfreq)){
//print_per("cpu not support this kind of time functions: ");
}
#endif
#endif
//前期处理
#ifdef CALCULATE_SPEED
#ifndef WIN32
gettimeofday(&m_tmstart, (struct timezone *)0);
#else //WIN32
msleep(2000);/*
if(!QueryPerformanceCounter(&m_tmstart)){
;//print_per("cpu not support this kind of time functions: ");
};*/
if(!QueryPerformanceCounter(&m_tmstart)){
;//print_per("cpu not support this kind of time functions: ");
};
#endif//WIN32
#endif
//传送文件
#ifdef CALCULATE_SPEED
#ifndef WIN32
gettimeofday(&m_tmfinish, (struct timezone *)0);
tmconsume = (m_tmfinish.tv_sec - m_tmstart.tv_sec) + (m_tmfinish.tv_usec - m_tmstart.tv_usec)/1000000.0;
#else //WIN32
if(!QueryPerformanceCounter(&m_tmfinish)){
;//print_per("cpu not support this kind of time functions: ");
};
tmconsume = ((double)m_tmfinish.QuadPart - (double)m_tmstart.QuadPart) / ((double)m_tmfreq.QuadPart);
//trace("(%I64d - %I64d) / %I64d = %f\n", m_tmfinish.QuadPart, m_tmstart.QuadPart, m_tmfreq.QuadPart, tmconsume);
#endif//WIN32
trace("file send complete[%.2f s, %.2f MB/s]\n", tmconsume, fileinfo.file_size/tmconsume/1024/1024);
#else
trace("file send complete\n");
#endif
//后期处理
return 0;
}
如果一次循环耗时非常少,那么就看汇编,算周期,当然,如果要考虑到是访问cache还是d
dr.
如果一次循环耗时是几十ms级别以下的,linux下面可以看jiffies变量,这个变量是定时
器中断的counter,定时器可以是1ms中断一次.
如果一次循环是百ms以上级别的,那么就用gettimeofday吧【 在 ttallen (Alan) 的大作中提到: 】
: PC上一次FOR循环时间怎么计算?