在您阅读问题之前,请知道这是"对于客户"因此,我在这件事上没有选择。
所以我们的客户正在为他们的项目使用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
是一个合适的解决方案吗?
另外,如果有人认为我应该核实这个问题并重新询问,请告诉我,我会。
答案 0 :(得分:3)
如果clock_gettime
不可用,另外两个要尝试的功能是ftime
和gettimeofday
。 (ftime
真的很旧,但它确实给你亚秒级。)
您可能知道,编译器是否接受这些函数不一定取决于编译器语言设置(C90或c99或c11)。它主要取决于您包含的头文件以及C库和OS支持的功能。
对于clock_gettime
,您应该包含<time.h>
对于gettimeofday
,您应该包含<sys/time.h>
对于ftime
,您应该包含<sys/timeb.h>
。
附录:正如@nos在评论中指出的那样,有时您必须#define某些符号来启用这些特定于操作系统的非C函数。