QIODevice::ReadWrite | QIODevice::Unbuffered - неподдерживаемый режим открытия

http://doc.qt.io/qt-5/qserialport.html

Предупреждение: режим должен быть QIODevice::ReadOnly, QIODevice::WriteOnly или QIODevice::ReadWrite. Другие режимы не поддерживаются.

Следующий код не открывает последовательный порт.

if(serialPort.open (QIODevice::ReadWrite | QIODevice::Unbuffered))
    {
        qDebug() << "asdasdas";
        serialPort.setDataBits(QSerialPort::Data8);
        serialPort.setParity(QSerialPort::NoParity);
        serialPort.setStopBits(QSerialPort::OneStop);
    }
    else
    {
        qDebug() << "QSerialPort::SerialPortError: " << serialPort.errorString();
    }

Как использовать небуферизованный флаг?

2 ответа

Решение

Как использовать небуферизованный флаг?

Здесь ничего нет. QSerialPort не поддерживает это.

Увы, ваше предположение о замедлении буферизации необоснованно, если только у вас нет измерений, демонстрирующих проблему. Держу пари, что у вас нет и не будет таких измерений. У вас есть другие проблемы. Последовательные порты обычно имеют сравнительно медленную пропускную способность, одиночные мегабиты в секунду не являются проблемой, когда дело доходит до буферизации, если вы не делаете что-то, что приводит к квадратичной стоимости буферизации, а не к линейной стоимости с очень низкой константой пропорциональности, как обычно есть.

Мой графический интерфейс замедляется во время передачи данных

Это невозможно в принципе. Потому что все операции ввода / вывода становятся асинхронными. Скорее всего, проблема в вашем коде.

Кроме того, вы не предоставили информацию о версии Qt и вашей ОС.

PS: небуферизованный режим вам не поможет. Кроме того, QSerialPort не поддерживает его, код ошибки говорит об этом напрямую! Ты понимаешь это?

Другие вопросы по тегам