c - 自进程开始以来耗时

标签 c timing multiplatform

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

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

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

我对精度不是很感兴趣,我已经破解了一个解决方案,方法是在后台旋转一个半秒的分辨率计时器来抵消时钟偏差发生时的情况 (如果采样时间和预期时间之间的差异超过 1 秒,我将使用预期计时器作为新基线)但我认为必须有更好的方法。

最佳答案

我猜你总是可以启动某种计时器。比如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 是您选择的应用程序结构,您可以存储变量。如果你想防止篡改,你需要确保没有人杀死你的线程

关于c - 自进程开始以来耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/200663/

相关文章:

c - 应用于结构和变量的 sizeof()

linux - CLOCK_MONOTONIC 与 CLOCK_MONOTONIC_RAW 有什么区别?

android - 多平台应用程序开发与操作系统开发

wolfram-mathematica - Mathematica 执行时错误 : symbol names

c# - 在 .NET 中为方法和线程计时

nuget - 使用用于内部依赖管理的符号进行多框架 NuGet 构建

ios - SwiftUI - 创建多平台应用程序时,如何更改场景中的 View ?

check50 说 CS50 过滤器-更多边缘不正确吗?

C 枚举标签 : When/Why to Use

c++ - 找到质数?