eventpp C++ 事件派发和回调代码库开源项目

我要开发同款
wqking2018年09月17日
52阅读
开发技术C/C++
所属分类程序开发、其他开发相关
授权协议Apache

作品详情

eventpp是一个C++事件库,它提供的工具允许应用程序组件通过调度事件并监听它们来相互通信。使用eventpp,您可以非常轻松地实现信号/插槽机制或观察者模式。

特性

支持同步事件调度和异步事件队列。

可配置和可扩展的策略和mixins。

通过mixins支持事件过滤器。

支持嵌套事件。在处理事件期间,侦听器可以安全地调度事件,追加/预置/插入/删除其他侦听器。

线程安全。支持多线程。

异常安全。大多数操作保证强异常安全。

用大量单元测试来保证质量。

速度快。EventQueue可以在1秒内处理10M事件(每毫秒10K事件)。CallbackList可以在1秒内调用100M回调(每毫秒100K回调)。CallbackList可以在1秒内添加/删除5M回调(每毫秒5K回调)。

灵活易用。

侦听器和事件可以是任何类型,不需要从任何基类继承。

纯头文件,没有源文件,无需构建。不依赖于其他库。

需要C++11(使用MSVC2017,MSVC2015,MinGW(Msys)gcc7.2和Ubuntugcc5.4测试)。

用可移植的标准的C++编写。

使用CallbackList#include "eventpp/callbacklist.h"eventpp::CallbackList<void (const std::string &, const bool)> callbackList;callbackList.append([](const std::string & s, const bool b) {    std::cout << std::boolalpha << "Got callback 1, s is " << s << " b is " << b << std::endl;});callbackList.append([](std::string s, int b) {    std::cout << std::boolalpha << "Got callback 2, s is " << s << " b is " << b << std::endl;});callbackList("Hello world", true);使用EventDispatcher#include "eventpp/eventdispatcher.h"eventpp::EventDispatcher<int, void ()> dispatcher;dispatcher.appendListener(3, []() {    std::cout << "Got event 3." << std::endl;});dispatcher.appendListener(5, []() {    std::cout << "Got event 5." << std::endl;});dispatcher.appendListener(5, []() {    std::cout << "Got another event 5." << std::endl;});// dispatch event 3dispatcher.dispatch(3);// dispatch event 5dispatcher.dispatch(5);使用EventQueueeventpp::EventQueue<int, void (const std::string &, const bool)> queue;dispatcher.appendListener(3, [](const std::string s, bool b) {    std::cout << std::boolalpha << "Got event 3, s is " << s << " b is " << b << std::endl;});dispatcher.appendListener(5, [](const std::string s, bool b) {    std::cout << std::boolalpha << "Got event 5, s is " << s << " b is " << b << std::endl;});// The listeners are not triggered during enqueue.queue.enqueue(3, "Hello", true);queue.enqueue(5, "World", false);// Process the event queue, dispatch all queued events.queue.process();
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论