diff --git a/libs/main/io_devices/piiodevice.cpp b/libs/main/io_devices/piiodevice.cpp index c3fb8b73..b3dcb165 100644 --- a/libs/main/io_devices/piiodevice.cpp +++ b/libs/main/io_devices/piiodevice.cpp @@ -302,6 +302,14 @@ void PIIODevice::stopAndWait(PISystemTime timeout) { } +void PIIODevice::shutdown(PISystemTime timeout) { + stop(); + close(); + waitThreadedReadFinished(timeout); + waitThreadedWriteFinished(timeout); +} + + ssize_t PIIODevice::read(void * read_to, ssize_t max_size) { ssize_t ret = readDevice(read_to, max_size); return ret; diff --git a/libs/main/io_devices/piiodevice.h b/libs/main/io_devices/piiodevice.h index 118f3c53..fcdf5935 100644 --- a/libs/main/io_devices/piiodevice.h +++ b/libs/main/io_devices/piiodevice.h @@ -330,6 +330,10 @@ public: //! \~russian Останавливает оба фоновых потока и ожидает их завершения. void stopAndWait(PISystemTime timeout = {}); + //! \~english Stops both background threads, close device and waits for threads completion. + //! \~russian Останавливает оба фоновых потока, закрывает устройство и ожидает завершения потоков. + void shutdown(PISystemTime timeout = {}); + //! \~english Interrupts a blocking device operation. //! \~russian Прерывает блокирующую операцию устройства. virtual void interrupt() {}