计算使用sleep()时的执行时间
我正在尝试从beagle骨中的ADC读取数据,运行Angstrom linux发行版。 我需要使用像sleep()这样的延迟机制,只在特定时间读取样本,以帮助符合特定的采样率。 我还需要计算执行时间。
这是一个示例POC(概念certificate),以certificate我面临的问题:
#include #include #include int main() { clock_t begin, end; while(1) { begin = clock(); sleep(1); // delay for 1 sec end = clock(); printf("Execution time = %f\n",((float)(end-begin)/CLOCKS_PER_SEC)); } }
我总是把执行时间设为0.0;
为什么我的结果不是1? 我的猜测是调用sleep()会抢占我的程序,但我不确定。
我还有什么其他选择来计算执行时间,包括延迟?
计算执行时间的解决方案是在程序开头和结束时获取时间戳。 然后有所作为。
#include #include int main() { time_t begin; time(&begin); // Somethings time_t end; time(&end); printf("Execution time %f\n", difftime(end, begin)); return (0); }
编辑:
#include #include #include int main() { struct timeval tv; gettimeofday(&tv, NULL); double begin = (tv.tv_sec) * 1000 + (tv.tv_usec) / 1000 ; sleep(2); gettimeofday(&tv, NULL); double end = (tv.tv_sec) * 1000 + (tv.tv_usec) / 1000 ; printf("Execution time %f\n", end - begin); return (0); }
确实:在sleep()
期间,程序根本不运行。 并且由于clock()
计算CPU时间而不是挂钟时间,“没有时间过去”。
请改用time()
。
clock_gettime是用于此目的的函数。 不要使用gettimeofday()…它已被弃用,并且在Opengroup和Linux手册页中有指导AGAINST使用它。
<<