在您阅读问题之前,请先知道这是“针对客户”的,因此我在此问题上的选择为零。

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

我查看了time.h的c90实现,发现time(time_t*)仅在秒级别是准确的。 clock应该让我知道自该程序开始运行以来已经经过了多少次点击,但是这种返回却不稳定。我的10000次重复出现的printf循环返回的clock()值介于30到120之间。这太不稳定了,无法使用。

因此,问题是,有人知道一种很好的c90兼容方法来获得毫秒级准确的系统时间吗?我们只对两个读数的增量感兴趣。

谢谢,
灵魂之剑

编辑:正如zwol所指出的,我忘了提及我确实知道clock_gettime是POSIX。我想我们对结果不太挑剔,只要使用-std=c90的cygwin上的gcc不会对我们抱怨。 :)为了辩护,我整天都在搜寻Google,而且我的大脑也很痛。

编辑2:经过进一步的研究,我怀疑我可能是在问一个错误的问题,因为我不完全了解POSIX是什么以及它的定义时间。因此,在.h中查找time.h时,我注意到使用_POSIX_TIMERS时未定义-std=90,这就是为什么我不能使用clock_gettime的原因。定义_POSIX_TIMERS可使一切正常。因此,我想我应该问的问题是“打开缺少的POSIX函数”的正确方法是什么,或者您认为简单地定义_POSIX_TIMERS是合适的解决方案?

另外,如果有人认为我应该对这个问题进行核对并重新提出,请告诉我,我会的。

最佳答案

如果clock_gettime不可用,请尝试另外两个功能:ftimegettimeofday。 (ftime确实很旧,但是确实可以让您获得亚秒级)。

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

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



附录:@nos在注释中指出,有时您必须#define一些符号以启用这些特定于OS的非C功能。

关于c - c90,POSIX和clock_gettime,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35094293/

10-15 02:16