升级Boost从1.48到1.88后调用boost::thread::try_join_for抛出invalid argument [generic:22]错误求助
升级Boost从1.48到1.88后调用boost::thread::try_join_for抛出invalid argument [generic:22]错误求助
各位好,我最近碰到个Boost版本升级后的棘手问题,想请大家帮忙看看。
我当前的开发环境是基于Yocto项目的嵌入式Linux,刚把Boost从1.48版本升级到了最新的1.88版本,使用的编译器是arm-poky-linux-gnueabi-g++ (GCC) 13.3.0。
这个问题可以用一段简单的代码复现,我原本以为这段代码是完全合法的:
boost::thread t([](){ std::this_thread::sleep_for(std::chrono::seconds(5)); }); try { std::cout << BOOST_VERSION << std::endl; #ifdef BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED t.try_join_for(std::chrono::seconds(1)); #endif } catch (const std::exception& e) { std::cerr << "Exception caught: " << e.what() << std::endl; }
运行这段代码时,调用boost::thread::try_join_for会抛出invalid argument [generic:22]的错误。在之前的Boost 1.48版本里,这段代码运行完全正常,没有任何异常。
我初步猜测可能是高版本Boost对线程操作的参数校验变得更严格了,或者是嵌入式平台上的std::chrono实现和新版本Boost的兼容性出了问题,但暂时还没找到具体原因。有没有朋友遇到过类似的问题,或者能给我一些排查的方向?
内容来源于stack exchange
相关产品推荐
相关产品推荐

