当前位置: 首页 > 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
http://www.lryc.cn/news/370739.html

相关文章:

  • 如何统计EXCEL中的数据透视表的信息?
  • 日本结构型产品及衍生品业务变迁报告
  • 解决Mac无法上网/网络异常的方法,重置网络
  • [12] 使用 CUDA 进行图像处理
  • MyBatisPlus代码生成器(交互式)快速指南
  • 深度学习模型训练之日志记录
  • 深入理解Python中的装饰器
  • 基于springboot的人力资源管理系统源码数据库
  • 如何舒适的使用VScode
  • 【微信小程序】开发环境配置
  • 启动盘镜像制作神器(下载即用)
  • PHP框架详解 - Symfony框架
  • 鸿蒙开发:【线程模型】
  • 初级网络工程师之从入门到入狱(三)
  • 【数据结构】排序(直接插入、折半插入、希尔排序、快排、冒泡、选择、堆排序、归并排序、基数排序)
  • MongoDB ObjectId 详解
  • 大数据-11-案例演习-淘宝双11数据分析与预测 (期末问题)
  • Kubernetes集群监控,kube-prometheus安装教程,一键部署
  • 【Gradio】快速入门
  • 深度学习Day-19:DenseNet算法实战与解析
  • 基于openssl实现AES ECB加解密
  • Git:从配置到合并冲突
  • leetcode hot100 之 最长公共子序列
  • 短剧APP开发,新的“财富”
  • Uniapp与第三方应用数据通讯
  • AI大模型战场:通用大模型与垂直大模型的角逐
  • linux的一些知识点分享-------关于操作维护的一些知识点
  • Python使用tkinter库设置背景图片、label显示位置和label设置显示图片
  • OpenStack是什么?
  • 2024下《系统规划与管理师》50个高频考点汇总!背就有效