Qt TcpSockets:SIGNAL断开超时

时间:2016-07-22 14:51:23

标签: qt sockets tcp qtcpsocket disconnected

我正在使用QTcpSocket类在我的QT-UI和我的PLC之间进行通信。

最近我改变了我的协议,以便我可以发送大量连贯的数据块。目标是通过TCP协议发送字符串数据。

在PLC侧,我将响应的发送延迟大约30毫秒。这是PLC处理字符串所需的时间。响应是发送的,我知道在UI端发送下一个。 现在的问题是,30毫秒似乎很长。在QTcpSocket::ReadyRead信号之前发出QTcpSocket :: disconnected信号。

有没有办法在QTcpSocket::disconnected发出时进行修改?例如,将超时设置为40毫秒。

我尝试了tcpSocket->waitForReadyRead(100),这也会导致发出断开连接的信号。

tcpSocket->setSocketOption(QAbstractSocket::KeepAliveOption, 1);也没有结果。

我现在能想到的唯一方法是立即发送响应并实现自定义等待函数,直到下一个字符串要发送。

void WaitMS(int DurationMS)
{
    QTime tWait;
    tWait.start();

    while(true){
        QCoreApplication::processEvents();
        if(tWait.elapsed()> DurationMS)
            break;
    }
}

这是一个选项,但这是一种粗略的方法。

感谢任何帮助。

0 个答案:

没有答案