当前位置:   article > 正文

boost的初始化失败错误Boost shared memory can't be initialized_boost::interprocess_exception::library_error

boost::interprocess_exception::library_error

在6月26号,遇到一个问题。

boost相关。

但因为没有相关的部分的源代码,所以只能去google去找。

看到一个在stack overflow上的贴子,似乎有些可能性。


当时的情况是,不是所有的机器都会出这个错误。只要某台机器上。


网上这个描述如下:


I found solution here boost::interprocess_exception - library_error exception when creating shared_memory_object
It's a bit weird, but here boost relies on Windows Event Logger. And if there is no event with ID = 6005. It throws an exception.
The code snippet from the boost 1.62.0 win32_api.hpp
//Obtains the bootup time from the System Event Log,
//event ID == 6005 (event log started).
//Adapted from http://msdn.microsoft.com/en-us/library/windows/desktop/bb427356.aspx
inline bool get_last_bootup_time(std::string &stamp)
{
   const char *source_name = "System";
   const char *provider_name = "EventLog";
   const unsigned short event_id = 6005u;
The solution was just to add the event 6005 and all work again fine.


===========================================

注意上面的文字,有两个信息,引起我的注意:

1)事件查看器

2)6005


==========================================

然后,大致了解到boost这样做的目的是为了取得系统开始工作的时间,也就是开机的时间。

见下图,正常的电脑如下:



但是,出现错误情况的电脑,在上图左侧的“系统”的位置,是一个红叉。

无法打开。

清空后,重启电脑,可以进入,并且找到6005,一切正常。


=========================================

其它:

1)想要复现该错误,很简单 ,只要清空事件,就会出现。也就是说boost如果找不到6005,就会出错。

当然,这是一个bug。

-----------------------------------------------------------------------

2)从合理性角度来说,boost这样实现,有些欠妥。



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/89518
推荐阅读
相关标签
  

闽ICP备14008679号