boost::asio的timer.cancel()结束不了计时器
今天写程序时,把两个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;
}
...全文
相关推荐
boost::asio::steady_timer使用[源码]
本文介绍了boost::asio::steady_timer的基础使用方法,对比了其与早期版本deadline_timer的区别。通过示例代码展示了steady_timer的初始化、异步等待、取消操作等核心功能。示例中详细说明了如何设置定时器过期时间、处理异步回调以及线程管理,并提供了完整的代码实现。文章还提到使用boost.chrono代替std.chrono的注意事项,为开发者提供了实用的参考。
C++ Boost Asio 网络库 讲解示例代码
http://blog.csdn.net/csnd_ayo/article/details/61577634 文章讲解的操作源码
boost asio
最新的Boost asio 先编译boost thread , timer等,然后就可以使用强劲的网络库了
快速了解Boost.Asio 的多线程模型
主要介绍了Boost.Asio 的多线程模型的相关知识,文中代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下
boost_timer
关于boost几个常用的 timer 的测试代码,


网络编程
