gpt4 book ai didi

c++ - boost::chrono::high_resolution_clock::now() 断言

转载 作者:行者123 更新时间:2023-11-28 03:33:59 25 4
gpt4 key购买 nike

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

Boost::Chrono - Internal Error.

我的应用程序是多线程的,所以有人知道 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 行

最佳答案

也许存在某种重入问题?我在 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 的参数是 QWord 对齐的,如 required ,所以这不是问题。

我有两个建议来解决这个问题。第一个建议是使用 other overload对于 now,它接受 system::error_code 并且不断言。第二个建议是要么禁用断言,要么通过 BOOST_ENABLE_ASSERT_HANDLER 为 Boost 提供断言处理程序...参见 assert.hpp .

关于c++ - boost::chrono::high_resolution_clock::now() 断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11651198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com