计时算法:C 中的时钟()与时间()

新手上路,请多包涵

对于算法的计时(大约以毫秒为单位),这两种方法中的哪一种更好:

 clock_t start = clock();
algorithm();
clock_t end = clock();
double time = (double) (end-start) / CLOCKS_PER_SEC * 1000.0;

或者,

 time_t start = time(0);
algorithm();
time_t end = time(0);
double time = difftime(end, start) * 1000.0;

此外,从 Freenode 的 C++ 频道的一些讨论中,我知道时钟的分辨率非常差,因此对于(相对)快速算法而言,时间将为零。但是,哪个具有更好的分辨率 time() 或 clock()?还是一样?

原文由 blaze 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 459
2 个回答

这取决于您想要什么: time 测量实时,而 clock 测量当前进程所花费的处理时间。如果您的进程休眠了相当长的时间,或者系统正忙于其他进程,那么两者将非常不同。

http://en.cppreference.com/w/cpp/chrono/c/clock

原文由 David Grayson 发布,翻译遵循 CC BY-SA 3.0 许可协议

<chrono> 如果你使用 C++11 会是一个更好的库。

 #include <iostream>
#include <chrono>
#include <thread>

void f()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
}

int main()
{
    auto t1 = std::chrono::high_resolution_clock::now();
    f();
    auto t2 = std::chrono::high_resolution_clock::now();
    std::cout << "f() took "
              << std::chrono::duration_cast<std::chrono::milliseconds>(t2-t1).count()
              << " milliseconds\n";
}

示例取自 这里

原文由 Rapptz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题