asio定时器深度探析
一次性定时
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定时器深度探析相关推荐
- 一文带你深度探析:软硬科技协同创新正当时
要说今年科技圈内最大的热点话题是什么?那必然是ChatGPT!ChatGPT推出约两个月后,月活跃用户超过1亿,成为史上增长最快的消费者应用程序.ChatGPT的爆火,随之而来的是有关人工智能技术未来 ...
- 6、vector深度探析
vector数据安排与操作和array相似.两者的区别在于array是静态空间一但确定大小就不能改变,要换大小只能有程序员去声明新的array空间,将旧空间的变量挨个赋值过去.而vector是动态空间 ...
- 高通量测序技术和序列拼接算法探析
高通量测序技术和序列拼接算法探析 时间:2019-05-27 来源:计算机科学 作者:周卫星,石海鹤 本文字数:16853字 摘 要: 高通量测序 (High-throughput Sequen ...
- 实录 | 平安人寿资深算法工程师姚晓远:对话生成模型的探析与创新
1 月 10 日(周四)晚 8 点,平安人寿智能平台团队资深算法工程师姚晓远在 PaperWeekly 直播间为大家带来了对话生成模型的探析与创新主题分享,并且介绍了平安人寿基于业务场景的技术探索成果 ...
- 今晚直播 | 平安人寿资深算法工程师姚晓远:对话生成模型的探析与创新
随着深度学习的发展,人机对话技术取得重大突破,成为人工智能领域的热点研究问题. 人机对话作为人机交互系统的核心功能之一,发挥着十分重要的作用.相比其他传统交互方式,人机对话可在聊天的过程中完成输入信息 ...
- 直播 | 平安人寿资深算法工程师姚晓远:对话生成模型的探析与创新
随着深度学习的发展,人机对话技术取得重大突破,成为人工智能领域的热点研究问题. 人机对话作为人机交互系统的核心功能之一,发挥着十分重要的作用.相比其他传统交互方式,人机对话可在聊天的过程中完成输入信息 ...
- 新工科背景下的大数据体系建设探析
新工科背景下的大数据体系建设探析 王元卓,于建业 中国科学院计算技术研究所,北京 100190 北京物资学院信息学院,北京 101149 摘要:大数据产业迅猛发展,对大数据人才培养提出了巨大挑战. ...
- 全球及中国商业航天产业应用模式探析及投资布局态势分析报告2021-2027年版
全球及中国商业航天产业应用模式探析及投资布局态势分析报告2021-2027年版 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- [修订 ...
- ChatGPT: 人工智能对话模型的前沿技术与应用探析
ChatGPT: 人工智能对话模型的前沿技术与应用探析 引言 ChatGPT作为一种人工智能对话模型,在近年来引起了广泛的关注和研究.随着人工智能技术的不断发展,ChatGPT作为一种前沿技术在人机对 ...
最新文章
- svn中提示”Files 的值 .mine 无效” 的解决方案
- 这项X射线技术让芯片无秘密可言:纳米级还原内部构造,现已破解16nm芯片
- WinCvs 操作参考手册
- [分享]MOSS的CSS样式说明,一个老外总结的
- AI基础:论文写作工具
- Asp.Net MVC 模型(使用Entity Framework创建模型类)
- windows下system函数的使用
- 前端学习(535):多列布局2
- 剖析Caffe源码之ImageDataLayer
- CCNA网络小菜鸟笔记之(第十一章, 广域网协议)
- 敏捷开发 我的经验(一)基本概念
- Docker系列(四)守护式容器
- 使用kepware配置opcua服务端,并使用UaExpert作为opc客户端进行连接(匿名和用户名密码)
- 软考中级网络工程师学习笔记(知识点汇总)详细版本
- HRA系列DC-DC隔离电源模块接线注意事项
- 基于Web服务的物联网-WoT(Web of Things)
- 标题相似度算法_一个简单的计算文章相似度功能!
- SQLite Expert Professional v5.4.34-Crack
- Ubuntu14.04下C++程序编辑、编译、运行入门篇
- 伤寒杂病论.辨太阳病脉证并治(中)