当前位置: 首页 > news >正文

苏州网站推广找苏州梦易行wordpress路由正则

苏州网站推广找苏州梦易行,wordpress路由正则,电子商务网站规划从哪些方面入手,青岛工程建设管理信息网站😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍事件驱动库libevent配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#xf…

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍事件驱动库libevent配置使用。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 项目介绍
    • :blush:2. 环境配置
    • :satisfied:3. 使用说明

😏1. 项目介绍

项目Github地址:https://github.com/libevent/libevent

官网:https://libevent.org/

libevent是一个开源的事件通知库,它提供了一个跨平台的接口,用于处理事件驱动的编程。它允许开发人员编写高性能、可扩展的网络应用程序和服务器,而无需关注底层的网络细节。

以下是libevent库的一些主要特点和功能:

1.事件驱动:libevent使用事件驱动的方式处理网络和I/O操作。它基于回调机制,可以处理各种事件,包括网络连接、读写操作、定时器等。

2.跨平台支持:libevent可以在多个平台上运行,包括Linux、Unix、Windows等。它封装了不同操作系统的底层API,使开发人员能够在不同平台上实现相同的功能。

3.高性能:libevent被设计成高效的事件通知引擎,它使用了高效的I/O多路复用技术(如epoll、kqueue等),能够同时处理大量的并发连接和事件。

4.可扩展性:libevent提供了可扩展的接口和机制,开发人员可以自定义事件的处理方式,并添加自定义的事件类型。它还支持多线程和多进程编程模型,方便实现并发处理。

5.支持多种协议:libevent支持多种网络协议,包括TCP、UDP、SSL等。它提供了相应的API和功能,以便开发人员轻松地构建各种网络应用程序。

6.容易使用:libevent具有简洁的API和良好的文档,易于学习和使用。它提供了丰富的示例代码和教程,帮助开发人员快速上手。

总的来说,libevent是一个强大、灵活且高效的事件通知库,广泛用于开发网络应用程序、服务器和高性能系统。

😊2. 环境配置

下面进行环境配置:

# apt安装
sudo apt install libevent-dev
# 查看版本(ubuntu默认2.1.8-stable)
pkg-config --modversion libevent
# 源码安装
tar -zxvf libevent-2.0.22-stable.tar.gz
cd libevent-2.0.22-stable/
./configure
make
sudo make install

😆3. 使用说明

下面进行使用分析:

最简示例:

#include <event2/event.h>
#include <iostream>void eventCallback(evutil_socket_t fd, short events, void* arg) {std::cout << "Event occurred on socket: " << fd << std::endl;
}int main() {// 创建一个event_base对象,用于管理事件循环event_base* base = event_base_new();if (!base) {std::cerr << "Failed to create event base." << std::endl;return 1;}// 创建一个事件event* ev = event_new(base, -1, EV_PERSIST, eventCallback, nullptr);if (!ev) {std::cerr << "Failed to create event." << std::endl;event_base_free(base);return 1;}// 添加事件到事件循环timeval delay = { 2, 0 }; // 设定事件触发延迟时间为2秒event_add(ev, &delay);// 启动事件循环if (event_base_dispatch(base) == -1) {std::cerr << "Failed to dispatch event base." << std::endl;event_free(ev);event_base_free(base);return 1;}// 清理资源event_free(ev);event_base_free(base);return 0;
}

编译运行:

g++ -o main main.cpp -levent
./main

基于libevent的线程池示例:

#include <event2/event.h>
#include <event2/thread.h>
#include <iostream>
#include <vector>
#include <queue>
#include <mutex>
#include <condition_variable>
#include <functional>
#include <thread>// 任务结构体
struct Task {std::function<void()> function;Task(const std::function<void()>& f) : function(f) {}
};// 线程池类
class ThreadPool {
public:ThreadPool(int numThreads) : stop(false) {// 初始化libevent线程支持evthread_use_pthreads();for (int i = 0; i < numThreads; ++i) {threads.emplace_back([this] {event_base* base = event_base_new();if (!base) {std::cerr << "Failed to create event base." << std::endl;return;}// 创建事件来触发任务执行event* ev = event_new(base, -1, EV_PERSIST, [](evutil_socket_t fd, short events, void* arg) {ThreadPool* threadPool = static_cast<ThreadPool*>(arg);threadPool->executeTask();}, this);timeval delay = { 0, 1000 }; // 每隔1毫秒触发一次事件event_add(ev, &delay);// 执行事件循环event_base_dispatch(base);event_free(ev);event_base_free(base);});}}~ThreadPool() {{std::unique_lock<std::mutex> lock(taskMutex);stop = true;}taskCondition.notify_all();for (auto& thread : threads) {thread.join();}}template<class F>void enqueue(F&& f) {{std::unique_lock<std::mutex> lock(taskMutex);tasks.emplace(new Task(std::forward<F>(f)));}taskCondition.notify_one();}private:std::vector<std::thread> threads;std::queue<Task*> tasks;std::mutex taskMutex;std::condition_variable taskCondition;bool stop;void executeTask() {Task* task = nullptr;{std::unique_lock<std::mutex> lock(taskMutex);if (tasks.empty()) {return;}task = tasks.front();tasks.pop();}task->function();delete task;}
};// 示例使用
void taskFunction(int id) {std::cout << "Task " << id << " is being executed." << std::endl;
}int main() {const int numThreads = 4;ThreadPool threadPool(numThreads);std::cout << "Create " << numThreads << " pools..." << std::endl;// 提交任务到线程池for (int i = 0; i < 10; ++i) {threadPool.enqueue([i] {taskFunction(i);});}// 等待所有任务完成std::this_thread::sleep_for(std::chrono::seconds(3));std::cout << "Task end!!!" << std::endl;return 0;
}

编译运行:

g++ -o main main.cpp -levent -lpthread -levent_pthreads

在这里插入图片描述

以上。

http://www.yayakq.cn/news/915009/

相关文章:

  • 南宁伯才网络公司做网站好吗个人主页图片素材
  • 如何创建微网站临县网站建设
  • 上海市建设工程检测行业协会网站建设企业网站需要哪些东西
  • 做实验流程图的网站html代码基础
  • 如何给网站更换域名最超值的网站建设
  • 上海关键词优化的技巧宁波seo推广公司排名
  • 响应式全屏网站模板常州做的网站的公司网站
  • 厦门市建设局综合业务平台网站非洲购物网站排名
  • 登录河北建设厅网站进入不了下载app免费下载软件
  • 国际摄影作品网站WordPress编辑器过滤
  • 网站没有ftp 怎么推广学企业管理培训班
  • 网站开发众包平台红安建设局官方网站
  • 金川做网站公司营销网站的优点
  • 常见的网站空间有哪些汕头网站网店建设
  • wordpress中英文站点店面装修设计
  • 嵊州网站建设建设网站的命令
  • 炫酷响应式网站设计现在做网络的哪个方面最挣钱
  • 分类信息网站营销怎样做app推广
  • 怎样修改网站首页头部郑州网站托管公司哪家好
  • 页面好看的蛋糕网站网站建设工作室北京小俊哥
  • 全屏家居网站模板申请注册电子邮箱
  • 会建网站的人厦门建网站费用一览表
  • 门户网站建设不断微网站 功能
  • 泰州专业制作网站建立电子商务网站
  • 触屏网站模板石家庄大型公司建站
  • 嘉兴网站如何制作机械制造网站
  • 做网站的流程前端做什么阿里云网站安装
  • 中国招标网官网首页网站结构 seo
  • 电子商务营销师网站关键词优化网站推广
  • 增加网站访客北京ui设计app制作公司