How should QLocalSocket/QDataStream be read to avoid deadlocks?
QLocalSocket/QDataStream应该如何读取?
我有一个程序通过使用
1
2 3 4 5 6 7 8 9 10 11 12 |
void MySceneClient::receiveMessage() { qint32 msglength; (*m_stream) >> msglength; char* msgdata = new char[msglength]; |
我发现应用程序有时会在
如果我添加…
1
2 |
if (m_socket–>bytesAvailable() < 5)
return; |
…到此功能的开始,应用程序运行良好(带有简短的测试消息)。
然后我猜测(文档非常稀少)发生了某种死锁,我必须使用
这是为什么?从 QLocalSocket 读取的正确方法是什么?
您的循环阻塞了事件循环,因此如果所有数据都没有到达 pn 首次读取,您将永远无法获得数据,我认为这就是导致您的问题的原因。
正确的做法是使用信号和槽,这里是
请谨慎使用这种替代方法:如果您绝对确定您期望的所有数据都会迅速到达(对于您控制客户端和服务器的本地套接字可能不是不合理的),或者如果整个事情都在一个线程什么都不做,那么使用
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/268924.html