mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
core/qtserialbluetooth.cpp: use QEventLoop for polling
The Qt docs here: https://doc.qt.io/qt-5/qbluetoothsocket.html#details and here: https://doc.qt.io/qt-5/qabstractsocket.html#waitForReadyRead say that waitForReadyRead() does not work for QBluetoothSocket and that it's flaky on Windows for the underlying QAbstractSocket. Use a QEventLoop and a QTimer to poll the readyRead() signal. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
This commit is contained in:
parent
aceb8a547f
commit
e69f5c4e28
1 changed files with 10 additions and 1 deletions
|
@ -212,7 +212,16 @@ static dc_status_t qt_serial_poll(void *io, int timeout)
|
|||
|
||||
if (!device->socket)
|
||||
return DC_STATUS_INVALIDARGS;
|
||||
if (device->socket->waitForReadyRead(timeout))
|
||||
|
||||
QEventLoop loop;
|
||||
QTimer timer;
|
||||
timer.setSingleShot(true);
|
||||
loop.connect(&timer, SIGNAL(timeout()), SLOT(quit()));
|
||||
loop.connect(device->socket, SIGNAL(readyRead()), SLOT(quit()));
|
||||
timer.start(timeout);
|
||||
loop.exec();
|
||||
|
||||
if (!timer.isActive())
|
||||
return DC_STATUS_SUCCESS;
|
||||
return DC_STATUS_TIMEOUT;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue