在用C++编写程序时,经常会在某个事件发生后开始处理相应的任务,这种方式在Qt中可以利用到信号与槽来很方便的实现,但在服务器编程时,则需要自己来实现事件通知模块。

在此,提供利用用读写管道来实现事件通知,从而可以实现对异步事件的响应处理。

  1. 创建读写管道,且添加至epoll监听事件中

boo createPipe()
{//创建管道服务器句柄sock_fd = -1;int pipe_fds[2] = {-1, -1};if (pipe(pipe_fds) != 0){return false;}sock_fd         = pipe_fds[0];pipe_send_fd     = pipe_fds[1];//非阻塞设置int val = fcntl(sock_fd, F_GETFL, 0);if (fcntl(sock_fd, F_SETFL, val | O_NONBLOCK) == -1){return false}// 添加至epoll监听的事件中,等待epoll_wait返回
}

  2. 向pipe_send_fd写入数据

if(write(pipe_send_fd, "", 1) != 1) //一般是向某个队列发送数据之后,通过这种方式通知另一个线程来处理队列中的数据

  3. epoll_wait返回,再调用相应的接收数据事件处理函数

int OnRecv()
{char buf[1];if (read(sock_fd, buf, 1) != 1){return 0;}//获取任务,开始处理任务
    MsgTask asyn_task;if (!getMessage(asyn_task)){return 0;}return 1;
}

转载于:https://www.cnblogs.com/share-ideas/p/10849319.html

使用读写管道作为事件通知的C++实现相关推荐

  1. java后端站内通知_正确使用Java事件通知

    通过实现观察者模式来提供 Java 事件通知(Java event notification)似乎不是件什么难事儿,但这过程中也很容易就掉进一些陷阱.本文介绍了我自己在各种情形下,不小心制造的一些常见 ...

  2. 【kafka】kafka /log_dir_event_notification的LogDir脱机事件通知

    1.概述 我们会看到zk的数据中有一个节点/log_dir_event_notification/,这是一个序列号持久节点 这个节点在kafka中承担的作用是: 当某个Broker上的LogDir出现 ...

  3. epoll边缘触发_epoll事件通知机制详解,水平触发和边沿触发的区别

    看到网上有不少讨论epoll,但大多不够详细准确,以前面试有被问到这个问题.不去更深入的了解,只能停留在知其然而不知其所以然.于是,把epoll手册翻译一遍,更深入理解和掌握epoll事件处理相关知识 ...

  4. PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...

    源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...

  5. 学习笔记(07):C++网络编程进阶-IO模型之重叠Overlapped IO(基于事件通知)

    立即学习:https://edu.csdn.net/course/play/6082/113760?utm_source=blogtoedu 重叠Overlapped IO模型 重叠模型让应用程序使用 ...

  6. IO模型之重叠Overlapped IO基于事件通知

    文章目录 1. 重叠Overlapped IO模型 2. 重叠Overlapped IO模型的优点 3. 重叠IO请求的通知的方式 4. 重叠I0基于事件通知的流程 5. WSAOVERLAPPED结 ...

  7. WMI技术介绍和应用——事件通知

    在<WMI技术介绍和应用--WMI概述>中,我们使用了下图介绍WMI构架(转载请指明出于breaksoftware的csdn博客) 我们之前介绍的使用WMI查询系统.硬件等信息的功能,是通 ...

  8. python 事件通知模式_请问在 Python 的事件系统中,如何可以通过事件通知立刻终结一个正在运行的子线程?...

    大家好,最近在完善手头上一个基于事件系统的 GUI . 现在遇到一个问题,就是当我在执行一个按钮点击事件的时候,实际会开一个子线程进行业务逻辑的处理,这个处理过程可能会比较长,并且中间可能会出现一些不 ...

  9. spring事件通知机制详解

    优势 解耦 对同一种事件有多种处理方式 不干扰主线(main line) 起源 要讲spring的事件通知机制,就要先了解一下spring中的这些接口和抽象类: ApplicationEventPub ...

  10. 事件通知方式实现的重叠I/O模型

    // /// 事件通知方式实现的重叠I/O模型(异步IO模型) /// 这个模型的基本的设计实现是允许应用程序使用重叠的数据结构一次投递一个或者多个异步I/O /// 请求 /// 这个模型与上述其他 ...

最新文章

  1. leetcode讲解--566. Reshape the Matrix
  2. 利用velocity模板以及itext生成pdf
  3. kindle亚马逊个人文档不显示_4.68亿个人信息泄露,大数据时代裸奔?探悉不落地的文档在线预览...
  4. App自动化测试之Adb基础命令使用
  5. 前端学习(1999)vue之电商管理系统电商系统之分析表单的数据
  6. CodeVS 1044 拦截导弹(DP)
  7. linux essid 异常,关于BSSID,ESSID讨论
  8. android实现qq登录功能实现原理,Android实现QQ登录功能
  9. AttributeError: module ‘tensorflow‘ has no attribute ‘ConfigProto‘
  10. 服务器的mdf文件怎么打开,mdf文件如何打开 mdf文件打开操作步骤
  11. 计算机扫描服务开启,扫描系统(window怎么开启扫描服务)
  12. 图形编程技术笔记整理1.1-1.6
  13. 雪花飘落代码java_JavaScript实现雪花飘落效果
  14. 洛谷 P2657 [SCOI2009] windy 数 (题解+代码)
  15. 69. 放下鼠标,离开键盘
  16. echarts图表中显示图例lengend
  17. linux 下 android手机驱动解决办法
  18. nunito字体_dcat-admin: 使用很少的代码快速构建一个功能完善的高颜值后台系统,内置丰富的后台常用组件,开箱即用,让开发者告别冗杂的HTML代码。...
  19. android开发获取签名错误,android开发打包签名出现-failed to export application的解决思路...
  20. 真值 原码 补码 反码 移码

热门文章

  1. Cython基础--Cython入门
  2. django(一)——在PyCharm下搭建开发环境
  3. 深度学习(一)TensorFlow入门教程集合
  4. java接口的关键字_java关键字-interface
  5. java 文件上传 乱码_java中文传值乱码问题的解决方法
  6. latex 表格 每列 分隔符
  7. 微信小程序云开发教程-微信小程序的JS高级-全局数据读写
  8. MyBatis学习(三)MyBatis的动态SQL
  9. 设计模式之GOF23中介者模式
  10. 焦仲卿刺杀孙策_惊闻:孙伯符死于焦仲卿之手。。。