从多个线程访问QTcpSocket

时间:2017-04-11 08:40:19

标签: c++ multithreading qt sockets

我正在修改用Qt编写的大型项目,当某些请求到来时,会生成qthreads。每个线程都写一个QTcpSocket,它在主线程中创建并连接到服务器。

线程类具有对QTcpSocket的引用。当需要写入它时,套接字写入数据并调用waitForBytesWritten然后返回。

然后线程等待一个条件,直到从套接字发出readyRead信号。

套接字上的访问受互斥锁保护。

对我来说问题是我看到很多" QSocketNotifier:无法从另一个线程启用或禁用套接字通知程序"警告。这是因为我从另一个线程写入套接字(套接字已在主线程中创建)。

我知道最好的解决方案应该是使用信号和插槽进行写入和读取,但不幸的是项目非常复杂,我没有时间改变这种行为。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以更改QTcpSocket实例的thread affinity以禁止警告。

但这不是正确的方法,你最好使用信号/插槽。