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

适合网站设计的gif图片dede酒业企业网站模板

适合网站设计的gif图片,dede酒业企业网站模板,动态个人网页制作html教程,做创意美食的视频网站有哪些项目完整在: 文章目录 一、Poller模块:描述符IO事件监控模块二、提供的功能三、实现思想(一)功能(二)意义(三)功能设计 四、封装思想五、代码(一)框架&#…

项目完整在:

文章目录

  • 一、Poller模块:描述符IO事件监控模块
  • 二、提供的功能
  • 三、实现思想
    • (一)功能
    • (二)意义
    • (三)功能设计
  • 四、封装思想
  • 五、代码
    • (一)框架
    • (二)完整代码

一、Poller模块:描述符IO事件监控模块

在这里插入图片描述

二、提供的功能

对任意的描述符进行IO事件监控。

三、实现思想

(一)功能

对任意的描述符进行IO事件监控。

(二)意义

对epoll进行的封装,让对描述符进行事件监控的操作更加简单。

(三)功能设计

  1. 添加事件监控—— channel模块
  2. 修改事件监控
  3. 移除事件监控
  4. 取消定时任务

四、封装思想

封装思想: 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_map<int,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_map<int,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::vector<Channel*> *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.yayakq.cn/news/122348/

相关文章:

  • 西安免费做网站多少钱网站后台更新了 前台不现实
  • 手机网站 微网站长春网站制作公司哪个好
  • 中国建设服务信息网站三网合一网站开发是什么
  • 庄河市城乡规划建设局网站没企业可以做网站吗
  • 网站购买云空间wordpress 3.5
  • 杭州模板建站软件模板搭建
  • 原江苏省建设厅网站揭阳城乡建设局网站
  • 大型网站开发项目合同网站开发一个人可以完成吗
  • 江西城乡建设网站手机网页制作工具下载
  • 什么网站做电气自动化兼职深圳网站建设列表网
  • php网站开发简介wordpress 中文模块
  • wordpress全站音乐九江网站建设制作
  • 网站建设优化现状图表超级优化
  • 做网站大概需要多少钱网站搬家
  • 官方网站百度一下外贸公司网站建设费会计科目
  • 网站优化是什么意思怎么在vmware上做网站
  • 中国装饰公司十大排名单纯做seo能否提升网站流量
  • 小网站推广my63777免费域名查询2023年
  • 网站开发项目实战视频如何制作app应用
  • 棕色网站设计开源 企业网站
  • 网站免费建站 图标网站建设公司多少钱
  • 府网站建设先进个人学建网站 必须学那些知识
  • 山东高阳建设公司网站修文县生态文明建设局网站
  • 酷炫给公司网站欣赏网站seo策划方案实例
  • 动漫php网站模板公司网站设计规范
  • 长沙企业网站建设企业视觉差网站插件
  • 外贸营销型网站建站软考高级职称哪个好考
  • 做网站需要哪些技术人员烟台做网站哪里好
  • 电影站的seosem营销是什么意思
  • 做视频网站都需要什么中国建筑工程网校