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

manimanihong4359 2013-11-13 02:36:01
今天写程序时,把两个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;
}
...全文
1324 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
manimanihong4359 2013-11-18
  • 打赏
  • 举报
回复
引用 3 楼 oyljerry 的回复:
cancel函数是否成功,返回值是什么
把boost::system::error_code传给cancle函数,返回的是0,表示成功的。
oyljerry 2013-11-17
  • 打赏
  • 举报
回复
cancel函数是否成功,返回值是什么
wxliangzyt 2013-11-15
  • 打赏
  • 举报
回复
这个,没看懂哟,说明白点啥
manimanihong4359 2013-11-15
  • 打赏
  • 举报
回复
引用 1 楼 wxliangzyt 的回复:
这个,没看懂哟,说明白点啥
就是第二个计时器的时间到后,TimerHandler2()调用timer1的cancel()函数,结果没用,结束不了,timer1仍然无限循环中。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧