QT QTcpServer多线程并发,主线程与子线程之间传递参数

发布于:2022-12-15 ⋅ 阅读:(1322) ⋅ 点赞:(1)

最近在做一个项目,用到QT 的网络通讯,并且要多线程并发的同时,还得主线程跟子线程之间传递参数。在csdn上各种搜索,最终找到了方向。原文链接是:

Qt笔记-QTcpSocket跨线程调用(官方推荐方法,非百度烂大街方法)_IT1995的博客-CSDN博客_qtcpsocket 线程

看完有点懂了 ,但是还是不是很明白,于是我去官网找到了如下部分。

以下是翻译,重点看红色部分。就是为什么可以这么做的原因。

[virtual protected]void QTcpServer::incomingConnection(qintptr socketDescriptor)

当新连接可用时,QTcpServer调用此虚拟函数。socketDescriptor参数是接受连接的本机套接字描述符。

基础工具创建QTcpSocket,设置套接字描述,然后将QTcpSocket存储在挂起连接的内部列表中。最后,发出newConnection()信号。

当连接可用时,重新实现此函数以更改服务器的行为。

如果此服务器正在使用QNetworkProxy,则socketDescriptor可能无法与本机套接字函数一起使用,只能与QTcpSocket::SetSocket描述符()一起使用。

注意:如果在该方法的重新实现中创建了另一个套接字,则需要通过调用addPendingConnection()将其添加到挂起连接机制中。

注意:如果您想将传入连接作为另一个线程中的新QtcSocket对象来处理,则必须将socketDescriptor传递给另一线程,并在那里创建QtcpSocket对象,并使用其setSocketDescroptor()方法。

另请参见newConnection()、nextPendingConnection()和addPendingConnect()。

一般为QTcpServe新建套接字QTcpSocket的时候,使用[virtual] QTcpSocket *QTcpServer::nextPendingConnection()方法,将返回值赋值给套接字对象。

当通过socketDescriptor属性新建套接字对象后,需要调用[protected] void QTcpServer::addPendingConnection(QTcpSocket *socket)方法与QTcpServer绑定,才可以自动接收QTcpServer的信号建立槽函数。


 

网站公告

今日签到

点亮在社区的每一天
去签到

热门文章