我正在使用boost::chrono::high_resolution_clock::now();,有时会得到:
加速::时间-内部错误。
我的应用程序是多线程的,所以有谁知道now()函数是否线程安全?
我查看了now()函数的实现,它使用了一个static变量,这可能意味着它不是线程安全的。
我的代码如下所示:
auto algTimer = boost::chrono::high_resolution_clock::now();我得到的信息是:
C:\boost\boost_1_48_0\boost\chrono\detail\inlined\win\chrono.hpp第44行
发布于 2013-11-22 06:08:36
也许有某种重新进入的问题?在Windows上,Boost 1.55也有相同的错误,每次我都检查断言同时发生在两个线程中。
不幸的是,有时QueryPerformanceCounter调用在boost\chrono\detail\inlined\win\chrono.hpp的第42行失败,这将导致断言错误。
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。
https://stackoverflow.com/questions/11651198
复制相似问题