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

qt网络事件之QSocketNotifier

简介

QSocketNotifier用于处理网络事件的,即事件处理器

结构

QSocketNotifier
+qintptr socket()
+Type type()
+bool isEnabled()
+void setEnabled(bool)
+void activated(int socket, QPrivateSignal)
#bool event(QEvent *)
QSocketNotifierPrivate
+qintptr sockfd
+QSocketNotifier::Type sntype
+bool snenabled

qintptr socket():表示对应的网络套接字
Type type():表示关注的事件类型,使用枚举表示

enum Type { Read, Write, Exception }

bool isEnabled():表示对应的是否注册到事件分发顺器中
void setEnabled(bool):是槽函数,表示是否将套接字注册到事件分发器中

void QSocketNotifier::setEnabled(bool enable)
{Q_D(QSocketNotifier);if (d->sockfd < 0)return;if (d->snenabled == enable)                        return;d->snenabled = enable;if (!d->threadData->hasEventDispatcher())return;if (Q_UNLIKELY(thread() != QThread::currentThread())) {return;}if (d->snenabled)d->threadData->eventDispatcher.loadRelaxed()->registerSocketNotifier(this);elsed->threadData->eventDispatcher.loadRelaxed()->unregisterSocketNotifier(this);
}

void activated(int socket, QPrivateSignal):信号,在event事件处理函数中,如果事件类型为QEvent::SockAct或者QEvent::SockClose,会触发该信号
bool event(QEvent *):事件处理函数

bool QSocketNotifier::event(QEvent *e)
{Q_D(QSocketNotifier);// Emits the activated() signal when a QEvent::SockAct or QEvent::SockClose is// received.if (e->type() == QEvent::ThreadChange) {if (d->snenabled) {QMetaObject::invokeMethod(this, "setEnabled", Qt::QueuedConnection,Q_ARG(bool, d->snenabled));setEnabled(false);}}QObject::event(e);                        // will activate filtersif ((e->type() == QEvent::SockAct) || (e->type() == QEvent::SockClose)) {emit activated(d->sockfd, QPrivateSignal());return true;}return false;
}

触发网络事件

QEventDispatcherUNIX QEventDispatcherUNIXPrivate QSocketNotifier processEvents qt_safe_poll activateSocketNotifiers event emit activated QEventDispatcherUNIX QEventDispatcherUNIXPrivate QSocketNotifier

相关文章:

  • 拥抱生态农业,享受绿色生活
  • 软件测试--第三章 软件测试方法
  • java判断对象是否还在被引用
  • 【设计模式】装饰器模式(结构型)⭐⭐
  • linux常用命令及其选项
  • 手撸一个java网关框架
  • STM32使用HAL库时 UART ErrorCode
  • PowerDesigner导入Excel模板生成数据表
  • 鸿蒙开发接口数据管理:【@ohos.data.rdb (关系型数据库)】
  • Java 请求头加header
  • Kubernetes 二进制安装
  • LeetCode322.零钱兑换
  • 结构体(c++语言)
  • PDF分页处理:技术与实践
  • 千益畅行,共享旅游卡,满足您多样化的同行出行需求
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • ES6 学习笔记(一)let,const和解构赋值
  • Git 使用集
  • Hibernate【inverse和cascade属性】知识要点
  • IndexedDB
  • JS题目及答案整理
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Laravel Telescope:优雅的应用调试工具
  • php中curl和soap方式请求服务超时问题
  • spring boot 整合mybatis 无法输出sql的问题
  • springboot_database项目介绍
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 缓存与缓冲
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 想写好前端,先练好内功
  • 源码安装memcached和php memcache扩展
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​ArcGIS Pro 如何批量删除字段
  • #stm32驱动外设模块总结w5500模块
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (11)MATLAB PCA+SVM 人脸识别
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (三)SvelteKit教程:layout 文件
  • (十一)图像的罗伯特梯度锐化
  • (转) Android中ViewStub组件使用
  • (转载)虚函数剖析
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .net访问oracle数据库性能问题
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [20170705]diff比较执行结果的内容.txt
  • [AIGC] CompletableFuture的重要方法有哪些?
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [AIGC] 深入浅出 Python中的`enumerate`函数
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用