zl程序教程

您现在的位置是:首页 >  工具

当前栏目

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

Qt程序连接 直接 重新 崩溃 断开
2023-09-27 14:26:38 时间
最近再写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。