相当于Linux上的GetTickCount()

Mat*_*ner 28 c python linux time

我正在寻找GetTickCount()与Linux 相当的东西.

目前我正在使用Python time.time(),可能是通过调用gettimeofday().我担心的是,如果时钟被弄乱,例如NTP,返回的时间(unix时期)可能会不规律地改变.一个简单的过程或系统壁挂时间,只能以恒定的速率正向增加就足够了.

是否存在C或Python中的任何此类时间函数?

nos*_*nos 27

您可以在C中使用CLOCK_MONOTONIC:

struct timespec ts;
if(clock_gettime(CLOCK_MONOTONIC,&ts) != 0) {
 //error
}
Run Code Online (Sandbox Code Playgroud)

以Python方式查看此问题 - 如何在python中获得单调持续时间?

  • 手册页上有一个注释:`CLOCK_MONOTONIC_RAW`(自Linux 2.6.28;特定于Linux)类似于`CLOCK_MONOTONIC`,但提供对不受NTP调整的原始硬件时间的访问.这是否意味着`CLOCK_MONOTONIC_RAW`更合适? (4认同)
  • 在非常旧的 Linux 系统上,您可以使用 /proc/uptime 作为单调时间源。笨重但有效。 (2认同)
  • @MattJoiner:当`CLOCK_MONOTONIC_RAW`谈论NTP调整时,它指的是时钟的*速率*而不是绝对值。`CLOCK_MONOTONIC` 不会跳过(顾名思义),并且通常是正确的选择。 (2认同)

小智 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;
}
Run Code Online (Sandbox Code Playgroud)

是的,get_tick()是我的应用程序的主干.每个"任务"由一个状态机组成,例如,可以在不使用线程的情况下进行多任务和进程间通信可以实现非阻塞延迟.


小智 5

你应该使用:clock_gettime(CLOCK_MONOTONIC, &tp);.与Windows上的GetTickCount()一样,此调用不受系统时间调整的影响.