eventpp事件库

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

特性
支持同步事件调度和异步事件队列。
可配置和可扩展的策略和mixins。
通过mixins支持事件过滤器。
支持嵌套事件。在处理事件期间,侦听器可以安全地调度事件,追加/预置/插入/删除其他侦听器。
线程安全。支持多线程。
异常安全。大多数操作保证强异常安全。
用大量单元测试来保证质量。
速度快。EventQueue可以在1秒内处理10M事件(每毫秒10K事件)。CallbackList可以在1秒内调用100M回调(每毫秒100K回调)。CallbackList可以在1秒内添加/删除5M回调(每毫秒5K回调)。
灵活易用。
侦听器和事件可以是任何类型,不需要从任何基类继承。
纯头文件,没有源文件,无需构建。不依赖于其他库。
需要C++11(使用MSVC 2017,MSVC 2015,MinGW(Msys)gcc 7.2和Ubuntu gcc 5.4测试)。
用可移植的标准的C++编写。
Version:0.1.0
License:Apache License  Version 2.0
GitHub:https://github.com/wqking/eventpp

使用 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 3
dispatcher.dispatch(3);
// dispatch event 5
dispatcher.dispatch(5);
使用 EventQueue
eventpp::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();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
libeventpp 是一个 C++ 封装的 libevent ,可以更方便地使用 libevent 实现网络编程。以下是 libeventpp 的使用步骤: 1. 下载和安装 libevent ,可以从官网下载最新版本的 libevent。 2. 下载 libeventpp 源代码,可以从 GitHub 上下载最新版本的源代码。 3. 在项目中包含 libeventpp 的头文件。 ``` #include "eventpp/event_loop.hpp" ``` 4. 创建一个 EventLoop 对象,并设置回调函数。 ``` eventpp::EventLoop loop; loop.Run(); ``` 5. 在回调函数中添加事件处理逻辑。 ``` void OnRead(evutil_socket_t fd, short events, void *arg) { char buffer[1024]; int len = recv(fd, buffer, sizeof(buffer), 0); if (len > 0) { // 处理接收到的数据 } else if (len == 0) { // 连接关闭 eventpp::EventLoop *loop = static_cast<eventpp::EventLoop *>(arg); loop->Stop(); } else { // 接收数据错误 } } ``` 6. 创建一个监听套接字,并将其添加到 EventLoop 中。 ``` int fd = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(8888); addr.sin_addr.s_addr = INADDR_ANY; bind(fd, (struct sockaddr *)&addr, sizeof(addr)); listen(fd, 10); eventpp::EventLoop loop; eventpp::EventWatcherPtr watcher = loop.Add(fd, EV_READ | EV_PERSIST, OnRead, &loop); loop.Run(); ``` 7. 启动 EventLoop 循环。 ``` eventpp::EventLoop loop; loop.Run(); ``` 8. 处理事件。 ``` eventpp::EventLoop loop; eventpp::EventWatcherPtr watcher = loop.Add(fd, EV_READ | EV_PERSIST, OnRead, &loop); loop.Run(); ``` 使用 libeventpp 可以更方便地实现网络编程,可以参考官方文档和示例代码深入学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值