我想在使用boost :: dll :: shared_library加載的DLL中使用Boost-Deadlinetimer。以下代碼片段被簡化爲基本要素。在Windows DLL中使用boost :: asio :: deadline_timer時出現死鎖
example.h文件:
#include <boost/asio.hpp>
class Example
{
public:
Class() : m_timer(m_ioService) { }
virtual ~Class() { }
//...
private:
boost::asio::io_service m_ioService;
boost::asio::deadline_timer m_timer;
//...
};
Example.cpp:
#include "Example.h"
#include <boost/config.hpp>
//...
extern "C" BOOST_SYMBOL_EXPORT Example MyExample;
Example MyExample;
Main.cpp的:
#include <boost/dll/Import.hpp>
//...
boost::dll::shared_library lib("Example.dll", boost::dll::load_mode::Default_mode);
//...
我的問題是,有一個僵局,而加載的dll編譯只要m_timer
在構造函數的初始化列表中。
當由boost::shared_ptr
替換m_timer
和初始化,在構造(或隨後的功能),那麼就沒有死鎖而裝載的dll但死鎖而卸載該DLL。
無論如何,我不能真正使用Windows DLL中的全局截止時間定時器對象。