我在一段现实代码中遇到问题,其中属于被删除类的函数被a调用boost::asio::deadline_timer
,偶尔会导致分段错误.
我遇到的问题是删除deadline_timer是从同一个io_service上的另一个计时器运行的.删除第一个deadline_timer
将触发对要运行的函数的最后一次调用,并出现boost::asio::error::operation_aborted
错误.但是,这只能io_service
在删除完成后在(相同)上进行调度,但到那时对象已被删除,因此不再有效.
所以我的问题是:我怎样才能防止这种情况发生?
以下是具有相同故障的简化示例:
//============================================================================
// Name : aTimeToKill.cpp
// Author : Pelle
// Description : Delete an object using a timer, from a timer
//============================================================================
#include <iostream>
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
using namespace std;
using namespace boost;
struct TimeBomb
{
bool m_active;
asio::deadline_timer m_runTimer;
TimeBomb(boost::asio::io_service& ioService)
: m_active(true)
, m_runTimer(ioService)
{
cout << "Bomb placed @"<< hex << (int)this << endl;
m_runTimer.expires_from_now(boost::posix_time::millisec(1000));
m_runTimer.async_wait(boost::bind(&TimeBomb::executeStepFunction, this, _1));
}
~TimeBomb() …
Run Code Online (Sandbox Code Playgroud)