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

打印 上一主题 下一主题

主题 894|帖子 894|积分 2682

上一节给大家从源码级别分析了SNetClient网络客户端的实现过程,详见​C++/Qt网络通讯模块设计与实现(二),并给大家留了一个疑问,即引入SNetClientRunning类是为了解决什么问题?
我们从SNetClient的设计出发,即要求在线程里进行数据包的收发,连接,断开处理等,这些处理不能在业务线程或者UI线程里进行。
说明

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


  • 使用方调用SNetClient Send函数
  • 数据投递到发送缓冲区,触发信号通知有数据
  • SNetClient线程收到通知则往socket写,从而把数据发送给对方;采用通知方式,非轮询方式
发送信号的线程为非SNetClient线程,往对方发数据需在SNetClient线程进行,因此在进行信号槽连接时,接收者所依附的线程必须是SNetClient线程,信号槽连接代码如下
  1. connect(this, SIGNAL(SignalSend()), m_pNetClientRunning, SLOT(SlotSend()), Qt::QueuedConnection); //QueuedConnection
复制代码
SNetClientRunning与SNetClient线程是什么关系?
详细讲解请点击C++/Qt网络通讯模块设计与实现(三)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

吴旭华

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表