ブースト asio タイマーとセーフ スレッドの動作について質問があります。たとえば、次のクラスがあるとします。
CTest.h:
class CTest
{
boost::asio::io_service io;
boost::asio::deadline_timer timer;
void Check();
CTest ();
~CTest ();
};
そして CTest.cpp:
CTest::CTest():
timer (io, boost::posix_time::seconds(0))
{
timer.async_wait(boost::bind(&CTest::Check, this));
boost::thread t(boost::bind(&boost::asio::io_service::run, &io));
}
void CTest::Check()
{
//some work
m_timer.expires_from_now(boost::posix_time::seconds(10));
m_timer.async_wait(boost::bind(&CTest::Check, this));
}
CTest::~CTest()
{
io.stop();
}
では、問題は、スレッド セーフの確認をどのように終了するかです。つまり、この Check 関数はデストラクタの後に呼び出すことができ、クラッシュが発生します。