evetpp是一个C++事件库,它提供的工具允许应用程序组件通过调度事件并监听它们来相互通信。使用evetpp,您可以非常轻松地实现信号/插槽机制或观察者模式。
特性支持同步事件调度和异步事件队列。
可配置和可扩展的策略和mixis。
通过mixis支持事件过滤器。
支持嵌套事件。在处理事件期间,侦听器可以安全地调度事件,追加/预置/插入/删除其他侦听器。
线程安全。支持多线程。
异常安全。大多数操作保证强异常安全。
用大量单元测试来保证质量。
速度快。EvetQueue可以在1秒内处理10M事件(每毫秒10K事件)。CallbackList可以在1秒内调用100M回调(每毫秒100K回调)。CallbackList可以在1秒内添加/删除5M回调(每毫秒5K回调)。
灵活易用。
侦听器和事件可以是任何类型,不需要从任何基类继承。
纯头文件,没有源文件,无需构建。不依赖于其他库。
需要C++11(使用MSVC2017,MSVC2015,MiGW(Msys)gcc7.2和Ubutugcc5.4测试)。
用可移植的标准的C++编写。
使用CallbackList#iclude "evetpp/callbacklist.h"evetpp::CallbackList<void (cost std::strig &, cost bool)> callbackList;callbackList.apped([](cost std::strig & s, cost bool b) { std::cout << std::boolalpha << "Got callback 1, s is " << s << " b is " << b << std::edl;});callbackList.apped([](std::strig s, it b) { std::cout << std::boolalpha << "Got callback 2, s is " << s << " b is " << b << std::edl;});callbackList("Hello world", true);使用EvetDispatcher#iclude "evetpp/evetdispatcher.h"evetpp::EvetDispatcher<it, void ()> dispatcher;dispatcher.appedListeer(3, []() { std::cout << "Got evet 3." << std::edl;});dispatcher.appedListeer(5, []() { std::cout << "Got evet 5." << std::edl;});dispatcher.appedListeer(5, []() { std::cout << "Got aother evet 5." << std::edl;});// dispatch evet 3dispatcher.dispatch(3);// dispatch evet 5dispatcher.dispatch(5);使用EvetQueueevetpp::EvetQueue<it, void (cost std::strig &, cost bool)> queue;dispatcher.appedListeer(3, [](cost std::strig s, bool b) { std::cout << std::boolalpha << "Got evet 3, s is " << s << " b is " << b << std::edl;});dispatcher.appedListeer(5, [](cost std::strig s, bool b) { std::cout << std::boolalpha << "Got evet 5, s is " << s << " b is " << b << std::edl;});// The listeers are ot triggered durig equeue.queue.equeue(3, "Hello", true);queue.equeue(5, "World", false);// Process the evet queue, dispatch all queued evets.queue.process();









评论