• 概念理解:boost::asio::定时器1


    同步定时器
    #include <cstdio>
    #include <iostream>
    #include <boost/asio.hpp> 
    #include <boost/date_time/posix_time/posix_time.hpp>
    int main()
    {
     boost::asio::io_service io;
     boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
     t.wait();//同步定时器,5后被调用
     std::cout << "Hello, world!
    ";
     return 0;
    }

    链接库 -lpthread -lboost_system

    异步定时器
    #include <cstdio> #include <iostream> #include <boost/asio.hpp> #include <boost/thread.hpp> #include <boost/date_time/posix_time/posix_time.hpp> using namespace std; /**************************************************************** 函 数:Print 参 数:void 返回值:const boost::system::error_code &ec -- 执行失败原因 说 明:回调函数 ****************************************************************/ void Print(const boost::system::error_code &ec) { cout << "Hello World!" << endl; cout << boost::this_thread::get_id() << endl;//id一致, 在同一个线程中执行 } int main() { cout << boost::this_thread::get_id() << endl;//id一致, 在同一个线程中执行 boost::asio::io_service io; boost::asio::deadline_timer t(io, boost::posix_time::seconds(5)); t.async_wait(Print);//异步定时器,立马返回 cout << "to run" << endl; io.run(); //异步IO调度 cout << "exit" << endl; return EXIT_SUCCESS; }
    回调函数绑定参数 boost::bind()
    /*
    *************************************************************** 函 数:Print 参 数:const boost::system::error_code &ec -- 执行失败原因 参 数:boost::asio::deadline_timer* pt -- 定时器 参 数:int * pcount -- 执行次数 返回值:void 说 明:回调函数 ****************************************************************/ void Print(const boost::system::error_code &ec, boost::asio::deadline_timer* pt, int* pcount) { if (*pcount < 3) { cout << "count = " << *pcount << endl; (*pcount)++; //推迟定时器的终止时间,确保回调函数不会在所需时间内到期 pt->expires_at(pt->expires_at() + boost::posix_time::seconds(5)); //重新绑定任务 pt->async_wait(boost::bind(Print, boost::asio::placeholders::error, pt, pcount)); } } int main() { boost::asio::io_service io; boost::asio::deadline_timer t(io, boost::posix_time::seconds(5)); int count = 0; t.async_wait(boost::bind(Print, boost::asio::placeholders::error, &t, &count)); cout << "to run" << endl; io.run(); cout << "Final count is " << count << " ";//3 cout << "exit" << endl; return 0; }
  • 相关阅读:
    IE6,IE7,IE8,Firefox 兼容的css hack以及常见兼容性问题
    BAT及各大互联网公司2014前端笔试面试题:HTML/CSS/JAVASCRIPT
    C语言学习
    HDU 3861 The King’s Problem 最小路径覆盖(强连通分量缩点+二分图最大匹配)
    HDU 2089 不要62【解题报告】
    POJ2762 Going from u to v or from v to u? 强连通分量缩点+拓扑排序
    HDU 1754 线段树入门解题报告
    2019/4/22 kmp模板
    2019/4/22 拓扑排序的高效写法. 模板题HDU1285:确定比赛名次
    HDU 2544最短路 【dijkstra 链式前向星+优先队列优化】
  • 原文地址:https://www.cnblogs.com/osbreak/p/10029416.html
Copyright © 2020-2023  润新知