C中的System.currentTimeMillis()
的等价性是什么?
答案 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_sec
和now.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()
一样编写此函数,并且它们具有相同的输出。