以C为单位获取当前时间(以毫秒为单位)?

时间:2012-04-11 00:46:45

标签: c

C中的System.currentTimeMillis()的等价性是什么?

5 个答案:

答案 0 :(得分:3)

在Linux和其他类Unix系统上,您应该使用clock_gettime(CLOCK_MONOTONIC)。如果这不可用(例如Linux 2.4),您可以回退到gettimeofday()。后者的缺点是受时钟调整的影响。

在Windows上,您可以使用QueryPerformanceCounter()

我的<This code将上述所有内容抽象为一个简单的接口,返回毫秒数作为int64_t。请注意,返回的毫秒值仅用于相对使用(例如超时),并且与任何特定时间无关。

答案 1 :(得分:2)

检查time.h,或许类似于gettimeofday()功能。

您可以执行类似

的操作
struct timeval now;
gettimeofday(&now, NULL);

然后,您可以通过从now.tv_secnow.tv_usec获取值来提取时间。

答案 2 :(得分:1)

time()函数,但它返回秒,而不是毫秒。如果您需要更高的精度,可以使用特定于平台的功能,如Windows“GetSystemTimeAsFileTime()或* nix的gettimeofday()

如果您实际上并不关心日期和时间,而只想计算两个事件之间的时间间隔,请执行以下操作:

long time1 = System.currentTimeMillis();
// ... do something that takes a while ...
long time2 = System.currentTimeMillis();
long elapsedMS = time2 - time1;

那么C等价物是clock()。在Windows上,为此目的使用GetTickCount()更为常见。

答案 3 :(得分:0)

请参阅此主题:http://cboard.cprogramming.com/c-programming/51247-current-system-time-milliseconds.html

它表示time()函数精确到秒,而更深的精度需要其他库......

答案 4 :(得分:0)

#include <sys/time.h>
/**
* @brief provide same output with the native function in java called
* currentTimeMillis().
*/
int64_t currentTimeMillis() {
  struct timeval time;
  gettimeofday(&time, NULL);
  int64_t s1 = (int64_t)(time.tv_sec) * 1000;
  int64_t s2 = (time.tv_usec / 1000);
  return s1 + s2;
}

我像Java中的System.currentTimeMillis()一样编写此函数,并且它们具有相同的输出。