boost::asio的timer.cancel()结束不了计时器

manimanihong4359 manimanihong4359 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
今天写程序时,把两个boost::asio的timer包在一个类中,第一个timer每1秒做一件事,第二个timer在一定时间后结束第一个timer,结果发现结束不了。请问怎么回事。
试例代码如下:
#include <boost/asio.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/bind.hpp>

struct STest
{
STest(boost::asio::io_service& io_server):
m_timer1(io_server),
m_timer2(io_server)
{}

boost::asio::deadline_timer m_timer1;
boost::asio::deadline_timer m_timer2;
};

void TimerHandler1(boost::shared_ptr<STest> pTest, const boost::system::error_code& error)
{
if(!error)
{
pTest->m_timer1.expires_from_now(boost::posix_time::seconds(1));
pTest->m_timer1.async_wait(boost::bind(&TimerHandler1, pTest, boost::asio::placeholders::error));
}
}

void TimerHandler2(boost::shared_ptr<STest> pTest, const boost::system::error_code& error)
{
if(!error)
pTest->m_timer1.cancel();
}

int main()
{
boost::asio::io_service io_Server;
boost::shared_ptr<STest> pTest(new STest(io_Server));
pTest->m_timer1.expires_from_now(boost::posix_time::seconds(1));
pTest->m_timer1.async_wait(boost::bind(&TimerHandler1, pTest, boost::asio::placeholders::error));
pTest->m_timer2.expires_from_now(boost::posix_time::seconds(2));
pTest->m_timer2.async_wait(boost::bind(&TimerHandler2, pTest, boost::asio::placeholders::error));
io_Server.run();

std::cout << "end" << std::endl;
return 0;
}
...全文
评论 4
收藏 已收藏
分享
返回顶部
manimanihong4359
网络编程 18,356 成员 64,161 内容