我在Linux上寻找等同于GetTickCount()
的内容。
目前我使用的是Python time.time()
,可能会调用gettimeofday()
。我担心的是,如果时钟被弄乱,例如NTP,返回的时间(unix时期)可能会不规律地改变。一个简单的过程或系统壁挂时间,只能以恒定的速率正向增加就足够了。
是否存在C或Python中的任何此类时间函数?
答案 0 :(得分:27)
您可以使用CLOCK_MONOTONIC,例如在C:
struct timespec ts;
if(clock_gettime(CLOCK_MONOTONIC,&ts) != 0) {
//error
}
以Python方式查看此问题 - How do I get monotonic time durations in python?
答案 1 :(得分:6)
这似乎有效:
#include <unistd.h>
#include <time.h>
uint32_t getTick() {
struct timespec ts;
unsigned theTick = 0U;
clock_gettime( CLOCK_REALTIME, &ts );
theTick = ts.tv_nsec / 1000000;
theTick += ts.tv_sec * 1000;
return theTick;
}
是的,get_tick() 是我的应用程序的主干。 每个任务包含一个状态机&#39; 例如,可以在不使用线程和进程间通信的情况下进行多任务 可以实现非阻塞延迟。
答案 2 :(得分:5)
您应该使用:clock_gettime(CLOCK_MONOTONIC, &tp);
。调用系统时间不受Windows上GetTickCount()的影响。
答案 3 :(得分:1)
是的,内核具有高分辨率的计时器,但它有所不同。我建议您查看以便携方式包装它的任何奇怪项目的来源。
从C / C ++我通常#ifdef
这个并在Linux上使用gettimeofday()
,这给了我微秒的分辨率。我经常将这个作为一个分数添加到自纪元以来的秒数我也收到了给我一个双倍。