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)
- 当控制权回到接受者所依附线程的事件循环时,槽函数被调用
- 槽函数在接收者所依附线程执行
示例源码
- 两个线程,即主线程与ResponseThread线程
- 在主线程里触发信号
- 验证槽函数在哪个线程里执行
- 加深理解所依附的线程的概念
备注::下述代码可以直接编译运行。
详细讲解请点击C++/Qt网络通讯模块设计与实现(四)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?