C++ (Qt)void Foo::sendDataRequest(){ ... serial->write(request); ...} void Foo::sendStatusRequest(){ ... serial->write(request); ...} void Foo::onReadyRead(){ m_packet += serial->readAll(); // Проверяем пакет. Если приняли не полный пакет - выходим. if (notFullPackage()) return; // Если пакет - есть ответ данных, то шлем запрос статуса. if (packageIsData()) { sendStatusRequest(); return; } // Если пакет - есть ответ статуса, то делаем что-то еще. if (packageIsStatus()) { doSomething(); return; } } Foo::onStartTransaction(){ sendDataRequest();}
C++ (Qt)QByteArray CSerialIface::sendSyncRequest(QByteArray &data) { CWaitLoop loop; QTimer::singleShot(responseTimeout, &loop, &CWaitLoop::quit); connect(this, &CSerialIface::responseReceived, &loop, &CWaitLoop::exitSlot); sendAsyncRequest(data); loop.exec(); return loop.response;}