【问题标题】:CLOCKS_PER_SEC Not Matching Results From std::clock()CLOCKS_PER_SEC 与 std::clock() 的结果不匹配
【发布时间】:2011-09-01 03:30:07
【问题描述】:

我正在使用下面的小程序来测试std::clock()

#include <ctime>
#include <iostream>

int main()
{   
    std::clock_t Begin = std::clock();

    int Dummy;
    std::cin >> Dummy;

    std::clock_t End = std::clock();

    std::cout << "CLOCKS_PER_SEC: " << CLOCKS_PER_SEC << "\n";
    std::cout << "Begin: " << Begin << "\n";
    std::cout << "End: " << End << "\n";
    std::cout << "Difference: " << (End - Begin) << std::endl;
}

但是,在等待几秒钟输入“虚拟”值后,我得到以下输出:

CLOCKS_PER_SEC: 1000000
Begin: 13504
End: 13604
Difference: 100

这显然没有多大意义。不管我等多久,差值总是在 100 左右。

我错过了什么?是否有一些我忘记包含的标题?

我正在使用带有 GCC 4.2 的 Xcode。

【问题讨论】:

    标签: c++ xcode gcc time clock


    【解决方案1】:

    clock() 计算 CPU 时间,因此如果它在等待输入,则不会增加任何时间。

    【讨论】:

    • 精氨酸。有没有标准的替代品?我不能使用time(),因为我需要比秒更精细的分辨率。
    • @Maxpm: 嗯,clock_gettime() 可能有用。
    • boost::timer 似乎也使用了clock()clock_gettime() 看起来不错,但我不想处理将其移植到 Windows 的问题。哦,好吧。
    • @Maxpm:是的,所以我发现了。这就是我从评论中编辑 Boost.Timer 的原因。 progress_timer 看起来更有趣,但它只是在其析构函数中输出经过的时间。我很惊讶 Boost 没有你要找的东西。
    • 在 POSIX 上使用 clock_gettime(CLOCK_MONOTONIC),在 Windows 上使用 GetTickCount/QueryPerformanceCounterclock 对于任何可移植的东西确实没有用,因为它计算 C 中的 CPU 时间和 VC++ 中的挂壁时间。
    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多