过程开始后经过的时间

时间:2008-10-14 10:30:32

标签: c timing multiplatform

我需要一种方法来获取自程序启动以来经过的时间(挂钟时间),这种方式对用户干预系统时钟具有弹性。

在Windows上,非标准时钟()实现不起作用,因为它似乎只是通过计算启动时采样的时间的差异来工作,所以如果我“移动时钟我得到负值双手回来“。

在UNIX上,clock / getrusage是指系统时间,而使用gettimeofday等函数来抽样时间戳则与在windows上使用clock时的问题相同。

我对精确度并不是很感兴趣,而且我已经通过在背景中旋转半秒钟分辨率计时器来破解解决方案 (如果采样时间和预期之间的差异超过1秒,我会使用新基线的预期计时器)但我认为必须有更好的方法。

6 个答案:

答案 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(或者QueryPerformanceCounterQueryPerformanceFrequency用于高分辨率计时器。我在Linux上没有这方面的经验,但在Google上的搜索给了我clock_gettime

答案 3 :(得分:0)

挂钟时间可以通过 time()调用来计算。

答案 4 :(得分:-1)

如果您有网络连接,则始终可以从NTP服务器获取时间。这显然不会受到任何本地时钟的影响。

答案 5 :(得分:-1)

Linux上的

/ proc / uptime维持系统启动的秒数(以及它已空闲的秒数),这应该不受系统中断维护的时钟更改的影响(jiffies) / HZ)。也许windows有类似的东西?