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

[FDBUS4.2] watcher的使用

fdbus的CFdbContext线程主要用于处理消息收发,是通过CFdEventLoop::dispatch()中的poll方法来触发。
本文主要介绍fdbus中watcher的使用及poll触发。
在这里插入图片描述
poll()中的pollfds的创建是在buildFdArray()方法中,通过轮询mWatchWorkingList中的watcher来实现,而watcher为CSysFdWatch实例出的对象。
在这里插入图片描述
CSysFdWatch实例出的对象主要为CServerSocketCFdbSessionCNotifyFdWatch

1、CServerSocket

server执行bind后,这里的worker为FDB_CONTEXT
在这里插入图片描述
将CAttachWatchJob同步添加到job队列中
在这里插入图片描述
在run()方法中将当前CServerSocket添加到CFdEventLoop的mWatchList和mWatchWorkingList中

  1. 将当前CServerSocket添加到CFdEventLoop的mWatchList中
    在这里插入图片描述
    在这里插入图片描述
  2. 将当前CServerSocket添加到CFdEventLoop的mWatchList和mWatchWorkingList中
    这里默认是立刻使能
    在这里插入图片描述
    enb最终传到enable
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    下面就是对于mWatchWorkingList的处理
    其中主要为如下操作,构建mPollFds和mPollWatches
    在这里插入图片描述
    注意这里的第151行。
    poll时会根据events的标志位来设置fd,进而触发select()方法。而events=flags
    在这里插入图片描述
    而flags的标志位,主要设置在构造函数中
    CServerSocket构造函数
    在这里插入图片描述
    CFdbSession构造函数
    在这里插入图片描述
    CNotifyFdWatch构造函数
    在这里插入图片描述
    如上,目前还没有POLLOUT。
    触发poll()后,接下来就进行timers或watchers的处理。
    在watcher又会用到这个events的标志位
    在这里插入图片描述

2、CFdbSession

CFdbSession的onInput()方法如下,主要是消息的接收处理,并触发onInvoke,onReply,onBroadcast,onStatus,onSubscribe的回调
在这里插入图片描述
而CFdbSession的创建,主要在CBaseClient和CBaseServer中
在Client端connect操作时创建CFdbSession
在这里插入图片描述
在Server端bind成功后,触发onInput时创建CFdbSession
在这里插入图片描述

3、CNotifyFdWatch

在CFdEventLoop::init方法中创建了CNotifyFdWatch并添加watch
在这里插入图片描述
当FDB_CONTEXT执行send操作进而触发job入队时
在这里插入图片描述
就会触发notify
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
与CNotifyFdWatch::onInput中的mEventFd.pickEvent()相呼应
在这里插入图片描述

http://www.dtcms.com/a/286898.html

相关文章:

  • STM32-CAN
  • vs openssl编译提示无法打开文件“libssl.lib”或“libcrypto.lib”
  • 理解 VMA 与 LMA
  • 【实战】Dify从0到100进阶--文档解读(8)文档列表节点
  • 深入剖析 Delta Live Tables (DLT):声明式数据管道的核心原理与底层实现
  • git:tag标签远程管理
  • 公贝固定资产管理系统对接HR、财务及采购系统的方案与效益
  • 【实用工具】HDCleaner:高效、安全、免费的系统清洁工具,免费的电脑清理垃圾神器,20秒扫出20G垃圾!
  • LP-MSPM0G3507学习--05中断及管脚中断
  • 习题4.1 输出3个人的顺序
  • APIs案例及知识点串讲(下)
  • NFS读写性能评估与优化指南(上)
  • Android性能优化之电量优化
  • C 语言字符大小写互转:tolower / toupper 详解与实战
  • MySQL使用any_value()函数解决only_full_group_by报错
  • IT 和OT指的什么?
  • 短视频矩阵的时代结束了吗?
  • 智能点餐推荐网站,解决选择困难
  • Linux基础IO通关秘籍:从文件描述符到重定向
  • 使用wrk对api接口进行性能测试
  • 机器视觉基础(直播回放)
  • git从本地仓库添加到远程仓库
  • 人工智能day9——模块化编程概念(模块、包、导入)及常见系统模块总结和第三方模块管理
  • MinIO 分布式文件系统
  • 阿里云ubuntu建一个简单网页+公网访问+域名访问
  • android14截屏
  • 短视频矩阵系统:从源头到开发的全面解析
  • 电源PCB设计的热管理攻坚战:从散热瓶颈到高功率密度突破
  • 3.0 - 指针-序列化
  • 傅里叶积分法求解偏微分方程