QT tcpsocket 在断开后重新连接程序直接崩溃


最近再写tcp程序时无意中碰到个问题,tcp客户端断开连接后再重新连接,发送数据直接报错:

 ASSERT: "m_buf" in file c:\users\qt\work\qt\qtbase\include\qtcore\5.9.1\qtcore\private\../../../../../src/corelib/io/qiodevice_p.h, line 116 


后来定位到发送数据write()函数上,经过调试后发现tcpsocket断开连接后直接触发信号槽重新连接.导致出错,如果手动重新连接则没事.

最后改了信号槽的连接方式就解决。

 

connect(this,SIGNAL(disconnected()),this,SLOT(connect_server()));
connect(this,SIGNAL(disconnected()),this,SLOT(connect_server()),Qt::QueuedConnection);
选择了
Qt::QueuedConnection模式
队列连接:内部通过postEvent实现的。不是实时调用的,槽函数永远在槽函数对象所在的线程中执行。如果信号参数是引用类型,则会另外复制一份的。
信号槽触发后并不是实时调用,给QT时间处理socket。

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM