计算使用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使用它。

<<