boost::asio::steady_timer基础使用
来源:互联网 发布:三维动画制作软件apk 编辑:程序博客网 时间:2024/05/18 09:12
看到书上说,boost::asio::deadline_timer是asio早期版本提供的定时器,使用boost.date_time库提供时间支持。貌似deadline_timer会被逐渐淘汰。所以学了一下更符合C++标准的steady_timer,
//boost::posix_time::to_simple_string函数需要这两个头文件#include <boost/date_time.hpp>#include <boost/date_time/posix_time/ptime.hpp>//使用boost.chrono代替std.chrono,#define BOOST_ASIO_DISABLE_STD_CHRONO#include <boost/asio.hpp>#include <boost/asio/steady_timer.hpp>#include <boost/asio/placeholders.hpp>#include <boost/thread.hpp>class MyClass{public: MyClass() :m_work(m_io), m_timer(m_io){}public: boost::thread_group m_thgp; boost::asio::io_service m_io; boost::asio::io_service::work m_work; boost::asio::steady_timer m_timer;public: void Init() { boost::system::error_code errCode; m_thgp.create_thread(boost::bind(&boost::asio::io_service::run, boost::ref(m_io), errCode)); std::cout << "Init_1, " << LocalTime() << std::endl; m_timer.expires_from_now(boost::chrono::milliseconds(4000)); //设置过期时间长度#if 0 m_timer.expires_from_now(std::chrono::milliseconds(4000));#endif std::cout << "Init_2, " << LocalTime() << std::endl; m_timer.async_wait(boost::bind(&MyClass::Test, this, boost::asio::placeholders::error));//异步等待 std::cout << "Init_3, " << LocalTime() << std::endl; //由Console可知, 函数立即返回了, 定时器的expires_from_now是由完成端口处理的 } void Stop() { std::cout << "Stop_1, " << LocalTime() << std::endl; m_timer.cancel(); // 取消所有handler m_work.~work(); m_thgp.join_all(); std::cout << "Stop_2, " << LocalTime() << std::endl; } static std::string LocalTime() { return boost::posix_time::to_simple_string(boost::posix_time::microsec_clock::local_time()); } void Test(const boost::system::error_code& ec) { printf("test_1, %s, ec.value=%d, ec.message=%s\n", LocalTime().c_str(), ec.value(), ec.message().c_str()); if (ec) return; m_timer.expires_from_now(boost::chrono::milliseconds(4000));#if 0 m_timer.expires_from_now(std::chrono::milliseconds(4000));#endif std::cout << "test_2, " << LocalTime() << std::endl; m_timer.async_wait(boost::bind(&MyClass::Test, boost::ref(*this), _1));#if 0 m_timer.async_wait(boost::bind(&MyClass::Test, this, _1)); m_timer.async_wait(boost::bind(&MyClass::Test, this, boost::asio::placeholders::error));#endif std::cout << "test_3, " << LocalTime() << std::endl; }};int main(int argc, char** argv){ MyClass my; my.Init(); for (int i = 0; i < 30; ++i) { boost::this_thread::sleep_for(boost::chrono::milliseconds(1000)); } my.Stop(); std::cout << "press ENTER to exit..." << std::endl; std::cin.sync(); while (getchar() != '\n') {}}
完。
0 0
- boost::asio::steady_timer基础使用
- boost::asio::steady_timer的一个错误用法
- Boost.Asio基础剖析
- boost.asio 使用点滴
- Boost Asio服务器使用
- boost::asio 使用实例
- boost asio使用注意事项
- Boost.Asio使用实例
- 翻译:Boost.Asio基础剖析
- Boost.Asio基础(一)
- Boost.Asio基础(二)
- Boost.Asio基础(三)
- Boost.Asio基础(四)
- Boost.Asio的使用技巧
- Boost.Asio的使用技巧
- Boost.Asio的使用技巧
- Boost.Asio的使用技巧
- Boost.Asio的使用技巧
- 关于MP4文件格式解析
- python key and network mointor
- (Java实现) HDOJ 2068 RPG的错排 错排及组合
- MFC获取当前工作路径和可执行文件路径
- Delphi中,indy控件实现收发邮件的几点学习记录( 可以考虑加入多线程,用多个邮箱做一个邮箱群发器)
- boost::asio::steady_timer基础使用
- iOS基础笔试题 - 集锦二
- 2016.05.26工作内容
- vim配置及插件安装管理(超级详细)
- Delphi的学习笔记九——汉字与区位码
- HDU 2073 无限的路(模拟)
- iOS开发之检查APP版本更新
- java中String、StringBuffer、StringBuilder的区别
- spring 学习中 遇到的那些坑