Qt5 - ASSERT: "bytesTransferred == writeChunkBuffer.size()"

Qt5 - ASSERT: "bytesTransferred == writeChunkBuffer.size()"

本文关键字:writeChunkBuffer size bytesTransferred ASSERT Qt5      更新时间:2023-10-16

我已经编写了一个使用QSerialport写入串行设备的工具。它运行一定时间,直到我收到以下错误消息:

断言:" bytestransferred == writechunkbuffer.size()" qSerialport_win.cpp,第511行

我的发送功能看起来像这样:

/**
 * @brief Send text to device
 * @param text
 * @return Success/Fail
 */
bool Serial::send(QString text)
{
    if (connectionStatus && qsp.isWritable()) {
        QByteArray buffer = text.toLatin1();
        if (buffer.size() != qsp.write(buffer))
            qDebug() << "Send does not work";
        qsp.flush();
        msleep(15);
        return true;
    } else {
        return false;
    }
}

如果我正确理解它,我将文本(大约20个字符)带到设备上,等待15ms,然后重复。我真的不明白为什么会收到此消息?

//编辑:

一段时间后,我弄清楚了问题所在。我忘了提到,为什么我等待15毫秒。那是文档的一部分,要等我发送数据后等待。与发送数据有关的最大问题是,我在单独的线程中运行QSerialport。通过使用该问题,我遇到了麻烦。我将其移至主要线程,并使用QT的信号插槽设计。

不知道您使用的API或它的工作原理,没有固有的理由write()方法应传输所有提供的数据,尤其是返回写入计数:明确的信号表明它可能不会一次转移所有内容。

唯一的问题是断言本身。您应该 loop ,直到编写数据为止,不要假设它们全部写在单个写作中。您也不应该在写作之间睡觉,徒劳地尝试超越您发送的设备。这实际上只是浪费时间。

相关文章:
  • 没有找到相关文章