一次性定时

asio::io_context io;
asio::steady_timer t(io, asio::chrono::seconds(5));
t.async_wait([](const std::error_code &ec){cout<<"that is timer here"<<endl;
});
cout << "start to run" << endl;
io.run();
cout << "end of timer" << endl;

以上是一次性定时 ,运行以此5秒以后,程序结束,虽然io.run(), 暂时阻塞了程序,5秒以后,阻塞不再发生,程序run结束,timer 定时一次。以下讨论timer 每5秒发生一次。

定时发生

#include <iostream>
#include <asio.hpp>
#include <thread>
using namespace std;class c_timer
{public:c_timer(asio::io_context &io):v_io(io),v_t(io){v_t.expires_after(asio::chrono::seconds(5));}void start(){v_t.async_wait([this](const std::error_code &ec) {cout << "this is timer here" << endl;v_t.expires_after(asio::chrono::seconds(5));start();});}
private:asio::io_context &v_io;asio::steady_timer v_t;
};
int main()
{asio::io_context io;c_timer timer(io);timer.start();io.run();return 0;
}

以下为运行结果,可以看出每5秒以后运行了一次,程序阻塞,如果需要程序非阻塞,可以加thread,让io.run,阻塞在线程中。

增加线程执行定时

定义数据结构logic

struct logic
{int count = 0;
};

logic 数据结构的一个对象将传递到线程中,线程使用定时器修改count,

#include <iostream>
#include <asio.hpp>
#include <thread>
using namespace std;struct logic
{int count = 0;
};
class c_timer
{public:c_timer(asio::io_context &io):v_io(io),v_t(io){v_t.expires_after(asio::chrono::seconds(5));}void start(logic &gc){v_t.async_wait([this,&gc](const std::error_code &ec) {cout << "this is timer here" << endl;gc.count++;v_t.expires_after(asio::chrono::seconds(5));start(gc);});}
private:asio::io_context &v_io;asio::steady_timer v_t;
};int main()
{logic lg;thread th([&lg]() {asio::io_context io;c_timer timer(io);timer.start(lg);io.run();return 0;});while (1){cout << "the count is " << lg.count<<endl;std::this_thread::sleep_for(std::chrono::seconds(5));}
}

直接使用lamba函数来定义一个线程启动asio.run,每隔5秒执行,count在线程中被修改,以下为执行结果

定时器总结

1 、asio.run并非一直阻塞,而是根据用户需求来阻塞
2 、多使用c++11 lamba来使用函数,更为简便
3、利用线程和定时器结合是一个很好的选择。

asio定时器深度探析相关推荐

  1. 一文带你深度探析:软硬科技协同创新正当时

    要说今年科技圈内最大的热点话题是什么?那必然是ChatGPT!ChatGPT推出约两个月后,月活跃用户超过1亿,成为史上增长最快的消费者应用程序.ChatGPT的爆火,随之而来的是有关人工智能技术未来 ...

  2. 6、vector深度探析

    vector数据安排与操作和array相似.两者的区别在于array是静态空间一但确定大小就不能改变,要换大小只能有程序员去声明新的array空间,将旧空间的变量挨个赋值过去.而vector是动态空间 ...

  3. 高通量测序技术和序列拼接算法探析

    高通量测序技术和序列拼接算法探析 时间:2019-05-27 来源:计算机科学 作者:周卫星,石海鹤 本文字数:16853字 摘    要: 高通量测序 (High-throughput Sequen ...

  4. 实录 | 平安人寿资深算法工程师姚晓远:对话生成模型的探析与创新

    1 月 10 日(周四)晚 8 点,平安人寿智能平台团队资深算法工程师姚晓远在 PaperWeekly 直播间为大家带来了对话生成模型的探析与创新主题分享,并且介绍了平安人寿基于业务场景的技术探索成果 ...

  5. 今晚直播 | 平安人寿资深算法工程师姚晓远:对话生成模型的探析与创新

    随着深度学习的发展,人机对话技术取得重大突破,成为人工智能领域的热点研究问题. 人机对话作为人机交互系统的核心功能之一,发挥着十分重要的作用.相比其他传统交互方式,人机对话可在聊天的过程中完成输入信息 ...

  6. 直播 | 平安人寿资深算法工程师姚晓远:对话生成模型的探析与创新

    随着深度学习的发展,人机对话技术取得重大突破,成为人工智能领域的热点研究问题. 人机对话作为人机交互系统的核心功能之一,发挥着十分重要的作用.相比其他传统交互方式,人机对话可在聊天的过程中完成输入信息 ...

  7. 新工科背景下的大数据体系建设探析

    新工科背景下的大数据体系建设探析 王元卓,于建业 中国科学院计算技术研究所,北京 100190 北京物资学院信息学院,北京 101149   摘要:大数据产业迅猛发展,对大数据人才培养提出了巨大挑战. ...

  8. 全球及中国商业航天产业应用模式探析及投资布局态势分析报告2021-2027年版

    全球及中国商业航天产业应用模式探析及投资布局态势分析报告2021-2027年版 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- [修订 ...

  9. ChatGPT: 人工智能对话模型的前沿技术与应用探析

    ChatGPT: 人工智能对话模型的前沿技术与应用探析 引言 ChatGPT作为一种人工智能对话模型,在近年来引起了广泛的关注和研究.随着人工智能技术的不断发展,ChatGPT作为一种前沿技术在人机对 ...

最新文章

  1. svn中提示”Files 的值 .mine 无效” 的解决方案
  2. 这项X射线技术让芯片无秘密可言:纳米级还原内部构造,现已破解16nm芯片
  3. WinCvs 操作参考手册
  4. [分享]MOSS的CSS样式说明,一个老外总结的
  5. AI基础:论文写作工具
  6. Asp.Net MVC 模型(使用Entity Framework创建模型类)
  7. windows下system函数的使用
  8. 前端学习(535):多列布局2
  9. 剖析Caffe源码之ImageDataLayer
  10. CCNA网络小菜鸟笔记之(第十一章, 广域网协议)
  11. 敏捷开发 我的经验(一)基本概念
  12. Docker系列(四)守护式容器
  13. 使用kepware配置opcua服务端,并使用UaExpert作为opc客户端进行连接(匿名和用户名密码)
  14. 软考中级网络工程师学习笔记(知识点汇总)详细版本
  15. HRA系列DC-DC隔离电源模块接线注意事项
  16. 基于Web服务的物联网-WoT(Web of Things)
  17. 标题相似度算法_一个简单的计算文章相似度功能!
  18. SQLite Expert Professional v5.4.34-Crack
  19. Ubuntu14.04下C++程序编辑、编译、运行入门篇
  20. 伤寒杂病论.辨太阳病脉证并治(中)

热门文章

  1. c++开发工具下载地址
  2. 徐起预热realme Q5系列:骁龙870+80W快充 新一代千元机皇
  3. 16名本科生领衔的芯片公司 芯微电子要上市了?
  4. 精锐教育创始人张熙辞任CEO 李晓明接任
  5. B站举办2021年度百大UP主盛典 科技知识类UP主占比翻倍
  6. Apple Music成为全球第二大音乐流媒体服务 远落后Spotify
  7. 特斯拉下一代Roadster跑车生产时间再度推迟至2023年
  8. 9年120亿,美的数字化转型纪实
  9. 英特尔CEO:将在行业整合背景下大力收购半导体企业
  10. 洲明科技与意法半导体合作开发新一代LED显示屏