c++ - 从多个线程访问 QTcpSocket

标签 c++ multithreading qt sockets

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

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

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

对套接字的访问受互斥量保护。

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

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

我能做什么?

最佳答案

您可以更改 thread affinity您的 QTcpSocket 实例以抑制警告。

但这确实不是正确的方式,你最好使用signal/slot。

关于c++ - 从多个线程访问 QTcpSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43340831/

相关文章:

java - Android 上的应用程序重新启动后,线程才会启动

c++ - 如何将 QListWidget 标签打印成字符串?

c++ - 这个比较是否不一致(还是存在另一个问题)?

c - 如何并行化 Windows 消息循环和 Hook 回调逻辑及其创建的 Ruby 线程?

c++ - 具有堆对象和销毁冲突的数据类型的浅拷贝

c++ - printf 调用搞砸了 std::thread 但 std::cout 很好

qt - 在Qt中,QEvent是什么意思失去窗口焦点,重新获得窗口焦点? (设置透明度)

qt - QML 中的字典

c++ - 最后一幕出现黑色背景

c++ - 类名和枚举值之间的冲突 : resolvable without namespaces?