Tag: boost

你能SWIG一个boost :: optional 吗?

我一直在成功使用SWIG构建一个包装器接口,以便在C#中使用我的C ++库。 最近我暴露了一些boost::optional对象,SWIG遇到了问题。 有没有一种标准的方法可以解决这个问题? 有人必须在此之前碰到这个……

exception抛出后,Boost共享互斥锁未释放

我在预先存在的.NET(C#,3.5)应用程序中遇到了一个奇怪的Boost(v1.38)互斥锁死锁,该应用程序调用C ++库。 在获得读取锁定之后的某个时刻[正确]抛出一个exception,并且该exception一直未处理回托管.NET代码(处理它的位置)。 尝试使用setter方法的c ++库的下一次调用会无限期地挂起唯一的锁定获取(可能是未释放读取锁定): ntdll.dll!NtWaitForSingleObject() + 0x15 bytes kernel32.dll!WaitForSingleObjectEx() + 0x43 bytes kernel32.dll!WaitForSingleObject() + 0x12 bytes OurCPPLib.dll!boost::shared_mutex::unlock_upgrade_and_lock() Line 478 + 0x11 bytes C++ OurCPPLib.dll!boost::unique_lock::unique_lock(boost::detail::thread_move_t<boost::upgrade_lock > other) Line 788 C++ OurCPPLib.dll!boost::upgrade_to_unique_lock::upgrade_to_unique_lock(boost::upgrade_lock & m_) Line 802 + 0x98 bytes C++ OurCPPLib.dll!OurClass::SetSomething(double something) Line 95 C++ 该类定义了许多Get和Set方法(读者/编写者)并像这样实现它们: boost::shared_mutex _calcSharedMutex; RETURNCODE GetSomething(double& something) { boost::shared_lock lock(_calcSharedMutex); return _anotherObject->GetSomething(something); […]