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

门户网站建设和推广济南金融行业网站开发

门户网站建设和推广,济南金融行业网站开发,网站建设方案包括,网站重新接入备案项目完整在#xff1a; 文章目录 一、Poller模块#xff1a;描述符IO事件监控模块二、提供的功能三、实现思想#xff08;一#xff09;功能#xff08;二#xff09;意义#xff08;三#xff09;功能设计 四、封装思想五、代码#xff08;一#xff09;框架#…项目完整在 文章目录 一、Poller模块描述符IO事件监控模块二、提供的功能三、实现思想一功能二意义三功能设计 四、封装思想五、代码一框架二完整代码 一、Poller模块描述符IO事件监控模块 二、提供的功能 对任意的描述符进行IO事件监控。 三、实现思想 一功能 对任意的描述符进行IO事件监控。 二意义 对epoll进行的封装让对描述符进行事件监控的操作更加简单。 三功能设计 添加事件监控—— channel模块修改事件监控移除事件监控取消定时任务 四、封装思想 封装思想 1. 必须拥有一个epoll的操作句柄2. 拥有一个struct epoll_event 结构数组监控保存所有的活跃事件3. 使用hash表管理描述符与描述符对应的事件管理Channnel对象 逻辑流程1. 对描述符进行监控通过Channnel才能知道描述符监控什么事件2. 当描述符就绪了通过描述符在hash表中找到对应的Channel得到了Channel才知道什么事件如何处理当描述符就绪了返回就绪描述符对应的Channel五、代码 一框架 框架 class Poller { private:int _epfd;struct epoll_event_evs[xxx];std::unordered_mapint,Channel* mp; private:// 1. 判断要更新事件的描述符是否存在// 2. 针对epoll直接操作添加修改移除 public:// 1. 添加或者更新描述符所监控的事件void Update(Channel* channel);// 2. 移除描述符所监控的事件void Remove(Channel* )// 3. 开始监控获取就绪Channel }; */ /*二完整代码 #define MAX_EPOLLEVENTS 1024 // Poller模块是对epoll进⾏封装的⼀个模块主要实现epoll的IO事件添加修改移除获取活跃连接功能。 class Poller { private:int _epfd;struct epoll_event _evs[MAX_EPOLLEVENTS];std::unordered_mapint,Channel* _channels; private:// 对epoll直接操作void Update(Channel* channel,int op) {int fd channel-Fd();struct epoll_event ev;ev.data.fd fd;ev.events channel-Events();int ret epoll_ctl(_epfd,op,fd,ev);if (ret 0) {ERR_LOG(EPOLLCTL FAILED!!!);abort(); // 推出程序}}// 判断一个Channel是否已经添加到了事件监控bool hashChannel(Channel* channel) {auto it _channels.find(channel - Fd());if (it _channels.end()) {return false;}return true;} public:Poller() {_epfd epoll_create(MAX_EPOLLEVENTS);if (_epfd 0) {ERR_LOG(EPOLL CREATE FAILED!!);abort();//退出程序}}// 添加或者修改监控事件void UpdateEvent(Channel* channel) { // 有描述符也有事件bool ret hashChannel(channel);if (ret false) {_channels.insert(std::make_pair(channel-Fd(),channel));return Update(channel,EPOLL_CTL_ADD); // 不存在添加}return Update(channel,EPOLL_CTL_MOD); // 存在了更新}// 移除监控事件void removeEvent(Channel *channel) {auto it _channels.find(channel-Fd());if (it ! _channels.end()) {_channels.erase(it);}Update(channel, EPOLL_CTL_DEL);}// 开始监控返回活跃链接void Poll(std::vectorChannel* *active) {// int epoll_wait(int epfd, struct epoll_event *evs, int maxevents, int timeout)int nfds epoll_wait(_epfd, _evs, MAX_EPOLLEVENTS, -1);if (nfds 0) {if (errno EINTR) {return ;}ERR_LOG(EPOLL WAIT ERROR:%s\n, strerror(errno));abort();//退出程序}for (int i 0; i nfds; i) {auto it _channels.find(_evs[i].data.fd);assert(it ! _channels.end());it-second-setRevents(_evs[i].events);//设置实际就绪的事件active-push_back(it-second);}return;} };
http://www.hn-smt.com/news/25878/

相关文章:

  • 相信
  • 2025年11月投资纠纷律师评价榜:陈杰带队五佳对比
  • 2025年11月江西展厅设计公司推荐榜:五强排名与案例对比分析
  • work4
  • 2025年11月南昌搬家公司服务榜:五强对比评价帮你选
  • AI元人文的终极形态:从“系统蓝图”到“指导智慧”的升维
  • Buildroot使用说明
  • 202511做题记录
  • 20232322 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • 赫尔曼黑塞《德米安》—生活之难,难在直面内心的自己
  • TOYOTA SYSTEMS Programming Contest 2025(AtCoder Beginner Contest 431)
  • 详细介绍:Java数据结构 - 二叉树
  • Entry HDL原理图导出料单设置步骤
  • 实用指南:【第十七周】机器学习笔记06
  • 深入解析:【深入浅出PyTorch】--6.2.PyTorch进阶训练技巧2
  • Java Redis “Sentinel(哨兵)与集群”面试清单(含超通俗生活案例与深度理解) - 实践
  • 2025年国内重袋包装机品牌推荐榜单
  • 164. 最大间距
  • Vibe Coding - 零成本使用claude code 、gpt-5、grok-code-fast-1氛围编程
  • [LangChain] 15. 内存型向量库
  • 大模型、智能体和MCP服务间的交互
  • 吸哎四匹 2025 游击
  • 阿里云智能集团首席科技官云栖大会要点总结
  • Unity2D 图片支持拖拽和以鼠标中心缩放
  • 2025年同步带直线滑台模组批发厂家权威推荐榜单:同步带直线滑块模组/伺服电机同步带直线模组/直线同步带模组源头厂家精选
  • 2025年粉末分级机气流优质厂家权威推荐榜单:气流分级机/气流分级机供应/卧式气流分级机源头厂家精选
  • Redis-用户签到(BitMap) - 指南
  • 31.高可用-Keepalived 全解析 - 教程
  • 数据库存储中的哈希表和B+树 - 详解
  • Nginx是干嘛用的?nginx服务器配置