【发布时间】:2015-07-04 05:40:53
【问题描述】:
由于 Mac OS X 不支持获取时间,我在这里找到了一个使用 clock_gettime 基金的便携方式的要点:
void current_utc_time(struct timespec *ts) {
#ifdef __MACH__ // OS X does not have clock_gettime, use clock_get_time
clock_serv_t cclock;
mach_timespec_t mts;
host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
clock_get_time(cclock, &mts);
mach_port_deallocate(mach_task_self(), cclock);
ts->tv_sec = mts.tv_sec;
ts->tv_nsec = mts.tv_nsec;
#else
clock_gettime(CLOCK_REALTIME, ts);
#endif
}
这样使用
struct timespec requestStart;
current_utc_time(&requestStart);
printf("start: s: %lu\n", requestStart.tv_sec);
printf("start: ns: %lu\n", requestStart.tv_nsec);
start: s: 1435988139
start: ns: 202015000
我正在尝试从此代码中获取秒和毫秒值,这是从纳秒值中获取毫秒的正确方法吗?
printf("total: ms: %lu\n", (requestStart.tv_nsec - requestEnd.tv_nsec) / (unsigned long)1000000);
如果是这样,我如何获得秒值?如果不是,我怎样才能得到毫秒和秒值?
编辑 针对第一条评论,我主要是在寻找一种使代码尽可能可移植的方法。
【问题讨论】:
-
这是 so 不是 ANSI C :-) 无论如何,真正的标准是 ISO,ANSI 只是当今的馈线机构之一。
-
MacOS 没有获取系统时间的简单界面?真是难以置信!
-
@wallyk 正如你从苹果官方文档中看到的那样,我使用了他们在上面的函数中提供的计时器。这是文档:developer.apple.com/library/ios/technotes/tn2169/_index.html 我更关心的是从上述函数将纳秒转换为秒和毫秒。
-
您是否尝试与
-lrt链接? clock_gettime(3) 是一个符合 POSIX 的函数,但在几种架构中,您必须链接它或使用#define _POSIX_SOURCE宏来访问它。