首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost::chrono::high_resolution_clock::now()断言

boost::chrono::high_resolution_clock::now()断言
EN

Stack Overflow用户
提问于 2012-07-25 13:46:51
回答 1查看 738关注 0票数 0

我正在使用boost::chrono::high_resolution_clock::now();,有时会得到:

加速::时间-内部错误。

我的应用程序是多线程的,所以有谁知道now()函数是否线程安全?

我查看了now()函数的实现,它使用了一个static变量,这可能意味着它不是线程安全的。

我的代码如下所示:

代码语言:javascript
复制
auto algTimer = boost::chrono::high_resolution_clock::now();

我得到的信息是:

C:\boost\boost_1_48_0\boost\chrono\detail\inlined\win\chrono.hpp第44行

EN

回答 1

Stack Overflow用户

发布于 2013-11-22 06:08:36

也许有某种重新进入的问题?在Windows上,Boost 1.55也有相同的错误,每次我都检查断言同时发生在两个线程中。

不幸的是,有时QueryPerformanceCounter调用在boost\chrono\detail\inlined\win\chrono.hpp的第42行失败,这将导致断言错误。

代码语言:javascript
复制
if ( (nanosecs_per_tic <= 0.0L) ||
        (!boost::detail::winapi::QueryPerformanceCounter( &pcount )) )
{
  BOOST_ASSERT(0 && "Boost::Chrono - Internal Error");
  return steady_clock::time_point();
}

对于此错误,有一个Boost票据,但是没有太多的活动。https://svn.boost.org/trac/boost/ticket/8006

我验证了QueryPerformanceCounter的参数与必填项是对齐的,所以这不是问题所在。

我有两个解决这个问题的建议。第一个建议是使用其他过载 for now,它接受system::error_code而不断言。第二个建议是禁用断言,或者通过BOOST_ENABLE_ASSERT_HANDLER...see assert.hpp向断言处理程序提供Boost。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11651198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档