我正在修改一个用Qt编写的大型项目,它会在某些请求到来时生成qthreads . 这些线程中的每一个都编写一个QTcpSocket,它在主线程中创建并连接到服务器 .
线程类具有对QTcpSocket的引用 . 当需要写入它时,套接字写入数据并调用waitForBytesWritten然后返回 .
然后线程等待一个条件,直到从套接字发出readyRead信号 .
使用互斥锁保护套接字上的访问权限 .
对我来说问题是我看到很多“QSocketNotifier:套接字通知程序无法启用或禁用其他线程”警告 . 这是因为我正在从另一个线程写入套接字(套接字已在主线程中创建) .
我知道最好的解决方案应该是使用信号和插槽进行写入和读取,但不幸的是项目非常复杂,我没有时间来改变这种行为 .
我能做什么?
1 回答
您可以更改QTcpSocket实例的thread affinity以禁止警告 .
但这真的不是正确的方法,你最好使用信号/插槽 .