我有一个关于boost asio定时器和安全线程与他们合作的问题。比方说,我有以下类:使用boost :: 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函数可以在析构函数后调用,并且我们有一个崩溃。
考虑到你的第三个建议,是否认为'std :: enable_shared_from_this'在这里可能有用? – 2016-12-30 18:43:51
@snow_abstraction不用于这种技术,因为销毁对象也会从'enable_shared_from_this'中销毁继承的数据成员,这意味着您无法检查有效性。 – janm 2016-12-31 02:13:44