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);
    else
        d->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 filters
    if ((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

相关推荐

  1. qt网络事件QSocketNotifier

    2024-06-08 20:48:03       17 阅读
  2. <span style='color:red;'>Qt</span> <span style='color:red;'>事件</span>

    Qt 事件

    2024-06-08 20:48:03      23 阅读
  3. <span style='color:red;'>Qt</span> <span style='color:red;'>事件</span>

    Qt 事件

    2024-06-08 20:48:03      18 阅读
  4. Qt事件

    2024-06-08 20:48:03       14 阅读
  5. QT——事件

    2024-06-08 20:48:03       20 阅读
  6. <span style='color:red;'>Qt</span> <span style='color:red;'>事件</span>

    Qt 事件

    2024-06-08 20:48:03      14 阅读
  7. 网络安全应急响应事件分类

    2024-06-08 20:48:03       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 20:48:03       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 20:48:03       5 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 20:48:03       4 阅读
  4. Python语言-面向对象

    2024-06-08 20:48:03       5 阅读

热门阅读

  1. vscode Run Code输出出现中文乱码情况问题解决方案

    2024-06-08 20:48:03       13 阅读
  2. Facebook海外户&Facebook广告被暂停的原因

    2024-06-08 20:48:03       16 阅读
  3. [知识点]c++运算符重载

    2024-06-08 20:48:03       13 阅读
  4. 模型训练——使用预训练权重、冻结训练

    2024-06-08 20:48:03       20 阅读
  5. 两段代码想编译其中一段

    2024-06-08 20:48:03       14 阅读
  6. 在IDEA中使用git分支进行开发然后合并到Master分支

    2024-06-08 20:48:03       14 阅读
  7. ros常用环境变量

    2024-06-08 20:48:03       13 阅读
  8. 递归及其使用

    2024-06-08 20:48:03       16 阅读
  9. 机器学习和深度学习相关指标和方法

    2024-06-08 20:48:03       18 阅读
  10. 算法刷题笔记 判断子序列(C++实现)

    2024-06-08 20:48:03       15 阅读
  11. Mongodb数组元素更新之使用$定位数组第一个元素

    2024-06-08 20:48:03       18 阅读
  12. C++linux下使用clog和重定向实现写日志

    2024-06-08 20:48:03       14 阅读
  13. 使用安装包安装飞桨寒武纪版本@启智(未通过)

    2024-06-08 20:48:03       19 阅读
  14. 《青少年编程与数学》课程方案:4、课程策略

    2024-06-08 20:48:03       16 阅读