How do I execute QTcpSocket functions in a different thread?
See Question&Answers more detail:osThe QT docs are explicit that the QTCPSocket
should not be used accross threads. I.E, create a QTCPSocket
in the main thread and have the signal tied to an object in another thread.
I suspect that you are implementing something like a web server where the listen creates a QTCPSocket
on the accept. You then want another thread to handle the task of processing that socket. You can't.
The way I worked around it is I kept the socket in the thread it was born in. I serviced all of the incoming data in that thread and threw it into a queue where another thread could work on that data.
virtual void incomingConnection(qintptr socketDescriptor)
Note: If another socket is created in the reimplementation of this method, it needs to be added to the Pending Connections mechanism by calling
addPendingConnection()
.Note: If you want to handle an incoming connection as a new
QTcpSocket
object in another thread you have to pass thesocketDescriptor
to the other thread and create theQTcpSocket
object there and use itssetSocketDescriptor()
method.