我需要一种方法来获取自程序启动以来经过的时间(挂钟时间),这种方式对用户干预系统时钟具有弹性。
在Windows上,非标准时钟()实现不起作用,因为它似乎只是通过计算启动时采样的时间的差异来工作,所以如果我“移动时钟我得到负值双手回来“。
在UNIX上,clock / getrusage是指系统时间,而使用gettimeofday等函数来抽样时间戳则与在windows上使用clock时的问题相同。
我对精确度并不是很感兴趣,而且我已经通过在背景中旋转半秒钟分辨率计时器来破解解决方案 (如果采样时间和预期之间的差异超过1秒,我会使用新基线的预期计时器)但我认为必须有更好的方法。
答案 0 :(得分:2)
我猜你总能开始某种计时器。例如在Linux下一个线程 会有这样的循环:
static void timer_thread(void * arg)
{
struct timespec delay;
unsigned int msecond_delay = ((app_state_t*)arg)->msecond_delay;
delay.tv_sec = 0;
delay.tv_nsec = msecond_delay * 1000000;
while(1) {
some_global_counter_increment();
nanosleep(&delay, NULL);
}
}
app_state_t
是您选择的应用程序结构,您存储变量。如果你想防止篡改,你需要确保没有人杀死你的线程
答案 1 :(得分:2)
对于POSIX,请将clock_gettime()
与CLOCK_MONOTONIC
一起使用。
答案 2 :(得分:1)
我认为你不会找到跨平台的方式。
在Windows上,您需要的是GetTickCount(或者QueryPerformanceCounter和QueryPerformanceFrequency用于高分辨率计时器。我在Linux上没有这方面的经验,但在Google上的搜索给了我clock_gettime。
答案 3 :(得分:0)
挂钟时间可以通过 time()调用来计算。
答案 4 :(得分:-1)
如果您有网络连接,则始终可以从NTP服务器获取时间。这显然不会受到任何本地时钟的影响。
答案 5 :(得分:-1)
/ proc / uptime维持系统启动的秒数(以及它已空闲的秒数),这应该不受系统中断维护的时钟更改的影响(jiffies) / HZ)。也许windows有类似的东西?