【问题标题】:how to measure time? [duplicate]如何测量时间? [复制]
【发布时间】:2014-04-20 18:47:49
【问题描述】:

我知道有很多主题可以找到代码的经过时间,并且我已经阅读了很多,但我真的很困惑我决定使用高分辨率时钟并运行此代码以查看时钟每秒滴答的次数

cout << chrono::high_resolution_clock::period::den << endl;
output:10000000

然后我定义了开始时间和结束时间如下

int main()
{
    auto begin = std::chrono::high_resolution_clock::now();
    .
    .
    .
    .
    auto end = std::chrono::high_resolution_clock::now();
    cout<<"RUN TIME IS :"<<endl;
    std::cout << std::chrono:: duration_cast <chrono:: nanoseconds>(end-begin).count() << "ns" << std::endl;
    system("PAUSE");
    //**********************************************************
    return 0;
}

但是大部分时候输出是0,但是代码是2000多行我浪费了很多时间,但是问题还没有解决。所以请让我知道这是确定经过时间的好方法吗?我的代码有什么问题?我正在使用 VS2012 另一个问题是我想测量一个问题的计算时间,我不确定我应该测量哪个(系统时间、用户时间或实时)? 提前谢谢你

【问题讨论】:

  • 这个问题真的很紧急,我不是c++高级,请指导我你的明确答案。
  • 我不确定你在问什么。你显示的内容works
  • 我省略了代码的主要部分,提到的部分是计时部分,我要求进行基准测试和测量计算时间我应该使用高分辨率时钟吗?我准备的代码是0,而代码是2000多行?@chris
  • @IMI:请阅读我关于类似主题的帖子:stackoverflow.com/a/23116709/2724703
  • 参见我上面的链接:基本上 Windows 实现(至少在 VS 2012 中)是“b0rked”。在 VS 中有多种其他方法可以测量时间。我对原始问题写了一条评论,解释了系统、用户和实时。

标签: c++ visual-c++ visual-studio-2012 benchmarking


【解决方案1】:

这是正确的......但时钟实际上并不需要“高分辨率”,这是实现定义的。

您可以考虑使用 Windows API 中内置的替代方法:

查看 QueryPerformanceCounter API,如this 问题中所述。

【讨论】:

  • 这个话题太有用了,但我想知道如何为计时器添加一个结束点?
  • 首先,抱歉让您久等了。无论如何,您不需要定义终点。定时器通常由硬件实现;您可以通过调用QueryPerformanceCounter 并减去两个QuadParts,除以QueryPerformanceFrequency 返回的值来计算经过的时间。我不知道你在想什么,但计时器不是从 0 开始的,所以你必须始终有一个初始时间来确定它们之间的差异。明白了吗?
  • 是的,幸运的是,您的明确答案解决了问题。再次感谢您
猜你喜欢
  • 2011-06-14
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 2019-03-30
相关资源
最近更新 更多