【问题标题】:Actual millis in a C++C ++中的实际毫秒
【发布时间】:2014-04-05 10:33:14
【问题描述】:

是否有可能在 Java 中的 System.currentTimeMillis() 之类的 C++ 程序中获得实际的毫秒,因为我不知道?我知道time(),但我认为它不足以测量短时间,是吗?

【问题讨论】:

标签: c++ time chrono


【解决方案1】:

如今(几年后)它已成为语言标准的一部分:

Live On Coliru

#include <chrono>
#include <iostream>

int main()
{
    using namespace std::chrono;

    auto epoch = high_resolution_clock::from_time_t(0);
    // ...
    auto now   = high_resolution_clock::now();

    auto mseconds = duration_cast<milliseconds>(now - epoch).count();

    std::cout << "millis: " << mseconds;
}

【讨论】:

  • +1 这就是我在 C++ 中的做法。注意:using namespace std::chrono; 在这里看起来很值得。
  • 将样本更改为实际打印自纪元以来的毫秒数
  • @LaszloPapp 如果没有 C++11 支持,这将无法工作 -- 没有必要考虑过时的标准,除非您处理的是遗留代码。
  • 好的,是时候让人们冷静下来了。都是有用的信息。无需暗示左右无能
【解决方案2】:

在 C++ 中,您也有 clock()

#include <time.h>

...

clock_t start = clock();
... some processing ...
clock_t stop = clock();

double elapsed = double(stop - start) / CLOCKS_PER_SEC;

还有其他更准确的计时方法,但它们更多地取决于您在哪个系统中运行程序。

【讨论】:

  • 好的,有什么常数可以得到毫秒吗?
  • clock 函数返回 CPU 时间。我觉得这是在询问墙上时间。
  • @pear: 把除法的结果乘以 1000 怎么样? :-)
  • @6502:当然,但这不会提高准确性,是吗?
  • @PEAR:常量CLOCKS_PER_SEC 的值取决于系统,提供的精度也是如此(它们不需要对齐;例如CLOCKS_PER_SEC 可能是100000,但精度只是20 毫秒)。
【解决方案3】:

如果您有可用的 C++11 支持,您可能需要查看std::chrono

#include <iostream>
#include <chrono>
#include <ctime>

long fibonacci(int n)
{
    if (n < 3) return 1;
    return fibonacci(n-1) + fibonacci(n-2);
}

int main()
{
    std::chrono::time_point<std::chrono::system_clock> start, end;
    start = std::chrono::system_clock::now();
    std::cout << "f(42) = " << fibonacci(42) << '\n';
    end = std::chrono::system_clock::now();

    std::chrono::duration<double> elapsed_seconds = end-start;
    std::time_t end_time = std::chrono::system_clock::to_time_t(end);

    std::cout << "finished computation at " << std::ctime(&end_time)
              << "elapsed time: " << elapsed_seconds.count() << "s\n";
}

如果做不到这一点,你可以使用 C 风格的 std::time 如下:

#include <ctime>
#include <iostream>

int main()
{
    std::time_t result = std::time(NULL);
    std::cout << std::asctime(std::localtime(&result))
              << result << " seconds since the Epoch\n";
}

【讨论】:

  • 秒数和时代有什么关系?
  • @sehe:请阅读原始问题中有关 System.currentTimeMillis 的信息。这可能是a good starting point
猜你喜欢
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 2011-05-06
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多