c90,POSIX和clock_gettime

时间:2016-01-29 21:23:53

标签: c

在您阅读问题之前,请知道这是"对于客户"因此,我在这件事上没有选择。

所以我们的客户正在为他们的项目使用c90标准。到目前为止,我们一直在使用c99并乐意这样做。完成此任务的功能是clock_gettime。我们需要一种方法来获得毫秒准确的时间用于计时。

我查看了time.h的c90实现,发现time(time_t*)只能在秒级准确。 clock应该让我知道自程序开始运行以来已经过了多少次点击,但这种情况有些不稳定。一个printf我有10000次重复,而循环返回的值为clock(),从30到120不等。这太不稳定了。

所以,问题是,是否有人知道一个良好的符合c90标准的方法来获得毫秒级的精确系统时间?我们只对两个读数的增量感兴趣。

谢谢, soulsabr

编辑:正如zwol所指出的,我忘了提及我知道clock_gettime是POSIX。只要使用-std=c90的cygwin上的gcc不会向我们抱怨,我认为我们对结果不太挑剔。 :)在我的辩护中,我整天都在谷歌搜索,我的大脑受伤了。

编辑2:经过进一步的研究后,我怀疑我可能会问错误的问题,因为我并不完全理解POSIX是什么以及何时定义。因此,查看.h time.h时,我注意到_POSIX_TIMERS在使用-std=90时未定义,这就是我无法使用clock_gettime的原因。定义_POSIX_TIMERS使一切正常。所以,我想我应该问的问题是什么是正确的方法,以便将错过的POSIX功能转换为"或者你认为简单地定义_POSIX_TIMERS是一个合适的解决方案吗?

另外,如果有人认为我应该核实这个问题并重新询问,请告诉我,我会。

1 个答案:

答案 0 :(得分:3)

如果clock_gettime不可用,另外两个要尝试的功能是ftimegettimeofday。 (ftime真的很旧,但它确实给你亚秒级。)

您可能知道,编译器是否接受这些函数不一定取决于编译器语言设置(C90或c99或c11)。它主要取决于您包含的头文件以及C库和OS支持的功能。

对于clock_gettime,您应该包含<time.h> 对于gettimeofday,您应该包含<sys/time.h> 对于ftime,您应该包含<sys/timeb.h>

附录:正如@nos在评论中指出的那样,有时您必须#define某些符号来启用这些特定于操作系统的非C函数。