Отправьте последовательное сообщение перед закрытием последовательного порта в Qt - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь разработать пользовательский интерфейс в Qt для проекта Academi c, который отправляет последовательные сообщения в микроконтроллер. Я борюсь с закрытием последовательного порта, хотя: пользовательский интерфейс должен отправить последовательное сообщение в микроконтроллер, прежде чем закрыть последовательный порт. Это часть кода, которая управляет этой операцией:

device->write(QString("ABORT___").toStdString().c_str());
displayMessage("Disconnected");
deviceIsConnected = false;
device->close();
ui->PortComboBox->setEnabled(true);
ui->tabWidget->setEnabled(false);
ui->ConnectButton->setText("Connect");
ui->ConnectionStatus->setText("<span style=\" color:#e1d41f;\">DISCONNECTED</span>");

Проблема состоит в том, что этот код закрывает порт до того, как сообщение фактически отправлено, фактически, если я пытаюсь прокомментировать эту строку device->close(); код работает как положено. Похоже, что порт закрыт до отправки сообщения, даже если после него находится строка, управляющая закрытием порта. Даже если я попытаюсь вложить строку device->close(); в некоторые операторы if, проблема не исчезнет.

Можете ли вы мне помочь?

1 Ответ

1 голос
/ 16 марта 2020

Вы должны закрыть порт после того, как сигнал bytesWritten испущен

В качестве альтернативы вы можете позвонить waitForBytesWritten

Для буферизованных устройств эта функция ожидает, пока на устройство не будет записана полезная нагрузка буферизованных записанных данных и сигнала bytesWritten (), или пока не пройдут миллисекунды мсек. Если msecs равен -1, эта функция не будет иметь тайм-аут. Для небуферизованных устройств возвращается немедленно.

...