How do I execute QTcpSocket in a different thread?

前端 未结 4 683
时光说笑
时光说笑 2020-12-18 00:33

How do I execute QTcpSocket functions in a different thread?

4条回答
  •  旧巷少年郎
    2020-12-18 01:05

    The 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 the socketDescriptor to the other thread and create the QTcpSocket object there and use its setSocketDescriptor() method.

提交回复
热议问题