QIODevice
class QCoroIODevice
QIODevice
has several different IO operations that can be waited on
asynchronously. Since QIODevice
itself doesn't provide the abaility to co_await
those
operations, QCoro provides a wrapper class called QCoroIODevice
. To wrap a QIODevice
into a QCoroIODevice
, use qCoro()
:
QCoroIODevice qCoro(QIODevice &);
QCoroIODevice qCoro(QIODevice *);
Note that Qt provides several subclasses of QIODevice
. QCoro provides coroutine-friendly
wrappers for some of those types as well (e.g. for QLocalSocket
). This
subclass can be passed to qCoro()
function as well. Oftentimes the wrapper class
will provide some additional features (like co_awaiting establishing connection etc.).
You can check whether QCoro supports the QIODevice subclass by checking the list of supported
Qt types.
readAll()
Waits until there are any data to be read from the device (similar to waiting until the device
emits QIODevice::readyRead()
signal) and then returns all data
available in the buffer as a QByteArray
. Doesn't suspend the coroutine if there are already
data available in the QIODevice
or if the QIODevice
is not opened for reading.
See documentation for QIODevice::readAll()
for details.
Awaitable auto QCoroIODevice::readAll();
read()
Waits until there are any data to be read from the device (similar to waiting until the device
emits QIODevice::readyRead()
signal) and then returns up to
maxSize
bytes as a QByteArray
. Doesn't suspend the coroutine if there are already data
available in the QIODevice
or if the device is not opened for reading.
See documentation for QIODevice::read()
for details.
Awaitable auto QCoroIODevice::read(qint64 maxSize = 0);
readLine()
Repeatedly waits for data to arrive until it encounters a newline character, end-of-data or
until it reads maxSize
bytes. Returns the resulting data as QByteArray
.
See documentation for QIODevice::readLine()
for details.
Awaitable auto QCoroIODevice::readLine(qint64 maxSize = 0)
Examples
const QByteArray data = co_await qCoro(device).readAll();