千家信息网

基于c++11的event-drivenlibrary的理解是怎样的

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这期内容当中小编将会给大家带来有关基于c++11的event-drivenlibrary的理解是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。做了一个不到20
千家信息网最后更新 2025年01月20日基于c++11的event-drivenlibrary的理解是怎样的

这期内容当中小编将会给大家带来有关基于c++11的event-drivenlibrary的理解是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

做了一个不到200行的事件驱动库,基于c++11标准,header-only,跨平台。支持自定义事件,通过wake_up函数异步唤醒。写这个库的动机是想为之前自己写的日志库提供日志回滚机制。

github:https://github.com/chloro-pn/event_pool

event_pool

基本介绍

a header-only event-driven library based on c++11.

一个基于c++11标准,仅需要头文件的事件驱动库:)。

使用方法:

创建event_pool对象并申请一个线程做事件处理,在该线程中调用run函数。

//run the event_pool. std::shared_ptr ev(new event_pool()); std::thread th([=]()->void { ev->run(); });

创建event_handle和time_handle对象并设置id_,type_,回调函数func_,上下文args_(如果是time_handle则还要设置触发时间)等,push进event_pool对象。

//create time_handle. std::shared_ptr h(new time_handle()); h->id_ = "timer test "; h->type_ = time_handle::type::duration; h->duration_ = seconds(2); h->args_ = nullptr; h->func_ = [](std::shared_ptr self)->void { std::cout << self->id_ << " wake up !" << std::endl; }; //create event_handle. std::shared_ptr eh(new event_handle()); eh->id_ = "back cout "; eh->type_ = event_handle::type::every; eh->args_ = nullptr; eh->func_ = [](std::shared_ptr self)->void { std::cout << self->id_ << " wake up !"<push_timer(h); ev->push_event(eh);

在需要触发事件的时候调用wake_up函数(time_handle没有wake_up函数,等待时间到达自动触发)。当需要关闭event_pool时,调用stop函数,然后回收线程,没有来得及处理的事件会被丢弃,即使当event_pool 对象完全销毁后,仍然可以调用wake_up函数,此时会直接返回。

while (true) { char buf[1024]; gets(buf); if (buf[0] == 'q') { ev->stop(); // stop the event_pool. break; } eh->wake_up(); } th.join();

使用指南:

  1. 所有对象均需使用std::shared_ptr创建。 每个time_handle对象和event_handle对象只能push进一个event_pool对象。 event_handle对象可设置两种类型:every和once,every类型允许不限次数的wake_up,event_pool会处理每次wake_up,而once类型只能被唤醒一次,但允许多次调用wake_up函数(线程安全),这意味着可以在多个线程并发的触发事件。 time_handle对象可设置两种类型:duration和time_point,其中duration类型通过设置duration_成员来指定从此刻开始,每间隔多少时间就触发一次。time_point类型通过设置time_point_成员来指定在哪个时刻仅触发一次。 回调函数的输入参数就是该事件对象本身,你可以通过其访问设置的id_,type_,args_等等。 event_pool的run函数可以在多个线程并发执行(maybe?),这一点暂且不保证。

特点:

1.轻量级,200行源代码,语言层面的跨平台,基于c++11标准。

2.仅需要头文件,即拿即用。

todo:

定义更便于使用,减少出错概率的接口。 补充测试。

上述就是小编为大家分享的基于c++11的event-drivenlibrary的理解是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

对象 函数 事件 类型 线程 时间 标准 处理 内容 多个 就是 成员 文件 日志 可设 分析 驱动 上下 上下文 中小 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 西安学习软件开发需要多少钱 灾害风险数据库影响 jsp查询的数据库不更新 视频客服软件开发 杭州数据库培训机构 互联网科技与春节 计算机三级网络技术大题真题 手游游戏软件开发公司有哪些 服务器上的虚拟浏览器 伊春市网络安全 湖北网络软件开发定制服务费 怎么进入捷顺管理软件的数据库 根据数据库日志恢复数据库 cs架构自动测试软件开发 邀请函网络安全隐私与数据保护 青少年网络安全问答 数据库系统设计的六个阶段英文 软件开发中什么时候用数组 网络安全本科专业教材 苹果应用软件开发者有啥风险 我的世界服务器开挂教 江苏通用软件开发费用 英雄联盟区域服务器在哪里 管家婆软件连接到服务器异常 ftp服务器最便宜的服务器 中国软件开发新科技 乐牌网络技术科技 部队网络安全防范怎么注意 银行软件开发要求 王者服务器未响应为啥一直这样
0