【问题标题】:c++ boost calculate time spent in functionc ++ boost计算函数花费的时间
【发布时间】:2011-07-18 15:13:08
【问题描述】:

再次问一个 boost 问题:我需要在我的 boost 线程中计算函数花费的时间:这里是代码:

boost::posix_time::microseconds tes( 12 );
int i = 0;
while( true )
{
    boost::posix_time::ptime start = boost::posix_time::microsec_clock::local_time( );

    myFunction( );

    boost::this_thread::sleep( tes );   

    boost::posix_time::ptime end = boost::posix_time::microsec_clock::local_time( );

    boost::posix_time::time_duration elapsed = end - start;
}

所以我尝试了很多次,但经过的 time_duration 始终为 0,我添加了测试 12 微秒的睡眠功能,所以最好的方法是我将经过 12 微秒但仍然为 0.. 我需要告诉线程在读取时间后更新计时器吗??

谢谢

【问题讨论】:

  • 几个问题:(1)你在什么系统上运行这个? boost 文档说,在 Windows 系统上,您可能无法获得微秒级分辨率。 (2) 你有没有尝试过更多的时间? (3) 你在哪里打印经过的时间?
  • 我在 windows xp 32 和 windows 7 64 下使用.. 所以在 windows 中只有几毫秒?
  • 我自己不做 Windows 编程,所以我不确定,但文档似乎让它听起来好像不能保证它可以达到微秒级的精度。快速搜索似乎表明 Windows 计时器在微秒级别上不是很可靠。如果您可以访问 posix 机器,我可能会尝试这样做。另外,您使用的是哪个版本的 Boost?
  • 试试 boost::timer。它是为这种事情设计的。

标签: c++ windows boost functional-testing duration


【解决方案1】:

根据boost documentationlocal_time在Win32系统上可能无法达到微秒级分辨率:

ptime microsec_clock::local_time()

使用亚秒级分辨率时钟获取本地时间。在 Unix 系统上,这是使用 GetTimeOfDay 实现的。在大多数 Win32 平台上,它是使用 ftime 实现的。 Win32 系统通常无法通过此 API 实现微秒级分辨率。如果更高的分辨率对您的应用程序至关重要,请测试您的平台以查看达到的分辨率。

可能您唯一的选择是使用high resolution timer(不可移植)

【讨论】:

  • 我尝试将所有更改为毫秒,但刷新问题仍然存在,差异始终为 0,如果我设置了 10 毫秒的睡眠时间
  • 上面的文档使用了“亚秒”的表达......毫秒也是亚秒。尝试延迟 2 秒...另请参阅我的编辑...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
相关资源
最近更新 更多