首页 > 编程语言 >C++/Qt网络通讯模块设计与实现(三)

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

时间:2023-03-19 12:12:09浏览次数:55  
标签:Qt C++ SNetClient 线程 网络通讯 信号

上一节给大家从源码级别分析了SNetClient网络客户端的实现过程,详见​C++/Qt网络通讯模块设计与实现(二),并给大家留了一个疑问,即引入SNetClientRunning类是为了解决什么问题?

我们从SNetClient的设计出发,即要求在线程里进行数据包的收发,连接,断开处理等,这些处理不能在业务线程或者UI线程里进行。

说明

以下SNetClientRunning分析过程,我假定大家对信号槽连接类型(Qt::ConnectionType),发送信号的线程,接收者所依附的线程等都理解(这些属于Qt的基本知识)。

发送

  1. 使用方调用SNetClient Send函数

  2. 数据投递到发送缓冲区,触发信号通知有数据

  3. SNetClient线程收到通知则往socket写,从而把数据发送给对方;采用通知方式,非轮询方式

发送信号的线程为非SNetClient线程,往对方发数据需在SNetClient线程进行,因此在进行信号槽连接时,接收者所依附的线程必须是SNetClient线程,信号槽连接代码如下

connect(this, SIGNAL(SignalSend()), m_pNetClientRunning, SLOT(SlotSend()), Qt::QueuedConnection); //QueuedConnection

SNetClientRunning与SNetClient线程是什么关系?

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

标签:Qt,C++,SNetClient,线程,网络通讯,信号
From: https://www.cnblogs.com/appsucc/p/17232761.html

相关文章

  • C++模板特化,Concept,typename
    typenameT,表示T为类型,而不是变量那,T::A是什么?T可以是我们自己写的类,那T::A就是成员变量或成员函数,另外,T::A还可以是类型,T内定义的类型所以,编译器需要区分,T::A到底是什么......
  • 钟楼-c++
    #include<iostream>#include"minecraft.h"usingnamespacestd;TxMinecraftmc;intx,y,z,id,data;voidsix(intx,inty,intz){//地基四个6*6正方形空心id......
  • QT5.15.2静态编译包下载
    QT5.15.2静态编译包下载      经过反复的折腾,终于编译成了QT5.15.2的静态编译。网上指导静态编译的资料很多,但是只有自己趟过坑,才知道有多深。最终明白“纸上......
  • Qt中的QDate
    //获取当前的日期QDated=QDate::currentDate();//第一种方式:qDebug()<<"year:"<<d.year()<<",moth:"<<d.month()<<",day:"<<d.d......
  • 08、【opencsacade+qt 篇】之二:绘制球
    绘制球的基本过程gp_Ax2类:实例化一个坐标;gp_Ax2::SetLocation(gp_Pnt);设置原点位置BRepPrimAPI_MakeSphere(gp_Ax2,int)::shape();传入坐标和半径并创建球形AIS_Sha......
  • SYNU PTA C++ 第三章实验题
    题目详细内容见PTA,仅提供答案参考。7-7冒泡1#include<iostream>2usingnamespacestd;34voidmerge(int*arr,intleft,intmid,intright)5{6......
  • C++ mutex,lock,unlock,lockguard
    //model/util.h#pragmaonce#include<algorithm>#include<chrono>#include<ctime>#include<fstream>#include<iomanip>#include<iostream>#include<map>......
  • Qt+百度AI文字识别OCR小工具
    Qt+百度AI文字识别mOCR小工具@目录Qt+百度AI文字识别mOCR小工具介绍编译环境界面功能To-doList介绍基于百度AI开放平台的OCR文字识别小工具,用Qt5编写。实现通用识别,精......
  • c++钟楼
    #include<iostream>#include<string>#include"minecraft.h"usingnamespacestd;TxMinecraftmc;intx,y,z,id,data;voida(){ //正方形 mc.fillBlocks(x,y-1......
  • Qt坐标点
    QLineline(QPoint(100,200),QPoint(150,210));QLinenewLine=line.translated(20,20);qDebug()<<"平移之前的坐标点:"<<line;qDebug()<<"平移之后的坐标点:"......