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でグローバルデッドラインタイマーオブジェクトを使用することはできません。