我有一個關於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