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


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

     ASSERT: "m_buf" in file c:usersqtworkqtqtbaseincludeqtcore5.9.1qtcoreprivate../../../../../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。
     
  • 相关阅读:
    2016.7.31整机升级计划
    UVa 1588
    UVa1587
    Jzoj4714 公约数
    Jzoj4714 公约数
    Jzoj4713 A
    Jzoj4713 A
    Jzoj4711 Binary
    Jzoj4711 Binary
    Jzoj4710 Value
  • 原文地址:https://www.cnblogs.com/kuangke/p/14702415.html
Copyright © 2020-2023  润新知