【问题标题】:Is it possible to get accurate time in C language?是否有可能用 C 语言获得准确的时间?
【发布时间】:2020-03-02 09:04:42
【问题描述】:

我知道c++中有<chrono>std::chrono::high_resolution_clock::now()可以得到std::chrono::high_resolution_clock::time_point类型的确切时间。但是,我使用的是原始 C 语言,因此无法调用此函数。 time()函数只能获取秒级时间。

我的最终目标是测量多线程程序的运行时间。 clock() 函数会将所有线程的时钟相加,因此不能用于测量运行时间。

【问题讨论】:

  • 时钟是准确的基准时钟,还是时钟是一天中的准确时间?无论哪种情况,它都是系统特定的。
  • POSIX 文档 clock_*() functions 可以满足您的需求。
  • @pmg 谢谢!看来我可以使用timespec_get() 来获取准确的时间。
  • 我知道 C++ 中有 <chrono> 并且 std::chrono::high_resolution_clock::now() 可以得到 std::chrono::high_resolution_clock::time_point 类型的确切时间。 在任何特定平台上,C++ 中没有任何东西具有访问任何比 C 可以访问的时钟更准确的时钟。 C++ 不会比 C 更准确。它们都可以访问相同的底层时钟实现。 C++ 只是在可移植抽象下隐藏了确切的实现。

标签: c time


【解决方案1】:

下面的 sn-p 将给出准确的系统时间:

time_t now;
time(&now);
struct tm* now_tm;
now_tm = localtime(&now);
char dte[80];
strftime (dte, 80, "%Y-%m-%d %I:%M:%S", now_tm);

【讨论】:

  • 我相信,对于 OP 的意图来说,分辨率不够。 OP 想要超过秒的分辨率,比如“百分之六秒”或“2718 微秒”
【解决方案2】:

不幸的是,更高分辨率的时钟往往会因平台而异。这还取决于您感兴趣的时钟类型(例如实时、CPU 时间或单调时间)。

根据您的用例,您可能需要单调时间……

如果您使用的是 POSIX 操作系统,clock_gettime 通常是最佳选择,但即便如此,可用的时钟也会有很大差异。例如,macOS doesn't support CLOCK_MONOTONIC,但它确实有其他 API 可用于获取单调时间。

如果您使用的是 Windows,您可能希望使用 QueryPerformanceCounters

如果你想要一些东西来抽象出差异,我put something together 不久前。

【讨论】:

    猜你喜欢
    • 2020-02-15
    • 2021-05-02
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多