C++/Qt网络通讯模块设计与实现

Posted IT文艺男------专注Qt/C++应用开发、Qt/C++

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++/Qt网络通讯模块设计与实现相关的知识,希望对你有一定的参考价值。

C++/Qt网络通讯模块设计与实现(三)中提到了一个概念,即接受者所依附的线程;关注我微信公众号的技术朋友留言对该概念还是不解,这节就单独讲述这个概念的理论与实际应用,这种应用无处不在,因为与Qt的信号槽、线程相关,大家需掌握。接下来从 Qt::ConnectionType,示例源码,结果论证,归纳总结等四个方面进行全方面讲解。

Qt::ConnectionType

[static] QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

Qt::ConnectionType是信号槽连接函数的第五个参数,有如下值

大家主要使用Qt::AutoConnection、Qt::DirectConnection、Qt::QueuedConnection三种值

自动连接(Qt::AutoConnection)

  • 默认值
  • 发射信号的线程与接受者所依附的线程为同一个线程,则等同于直接连接,否则等同于队列连接

直接连接(Qt::DirectConnection)

  • 槽函数会在信号发送时直接被调用(类似函数直接调用)
  • 槽函数在发送信号的线程里执行

队列连接(Qt::QueuedConnection)

  • 当控制权回到接受者所依附线程的事件循环时,槽函数被调用
  • 槽函数在接收者所依附线程执行

示例源码

  1. 两个线程,即主线程与ResponseThread线程
  2. 在主线程里触发信号
  3. 验证槽函数在哪个线程里执行
  4. 加深理解所依附的线程的概念

备注::下述代码可以直接编译运行。

详细讲解请点击C++/Qt网络通讯模块设计与实现(四)

以上是关于C++/Qt网络通讯模块设计与实现的主要内容,如果未能解决你的问题,请参考以下文章

QT之界面与业务逻辑的分离

QT/C++网络爬虫的内存池部分怎么写?

怎么用C语言编写简单的班级通讯录系统的管理与实现

搜索引擎模块设计与实现——集群模块

搜索引擎模块设计与实现——集群模块

搜索引擎模块设计与实现——集群模块