From 9d0f79927803c7ef0c0d93acb8ef8dc40506a7cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=8B=D1=87=D0=BA=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Sat, 9 Feb 2019 23:17:06 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@746 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- src_main/io_devices/piiodevice.cpp | 22 ++++++++++++++++++++++ src_main/io_devices/piiodevice.h | 4 ++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src_main/io_devices/piiodevice.cpp b/src_main/io_devices/piiodevice.cpp index c541ceb1..dee6674e 100755 --- a/src_main/io_devices/piiodevice.cpp +++ b/src_main/io_devices/piiodevice.cpp @@ -159,6 +159,24 @@ bool PIIODevice::setOption(PIIODevice::DeviceOption o, bool yes) { } +void PIIODevice::stopThreadedRead() { +#ifdef FREERTOS + PIThread::stop(true); +#else + PIThread::terminate(); +#endif +} + + +void PIIODevice::stopThreadedWrite() { +#ifdef FREERTOS + write_thread.stop(true); +#else + write_thread.terminate(); +#endif +} + + void PIIODevice::_init() { opened_ = init_ = thread_started_ = false; raise_threaded_read_ = true; @@ -221,8 +239,12 @@ void PIIODevice::terminate() { thread_started_ = false; if (!init_) return; if (isRunning()) { +#ifdef FREERTOS + stop(true); +#else stop(); PIThread::terminate(); +#endif } } diff --git a/src_main/io_devices/piiodevice.h b/src_main/io_devices/piiodevice.h index b189509b..05c74da4 100755 --- a/src_main/io_devices/piiodevice.h +++ b/src_main/io_devices/piiodevice.h @@ -177,7 +177,7 @@ public: void startThreadedRead(ReadRetFunc func) {ret_func_ = func; if (!isRunning()) PIThread::start();} //! Stop threaded read - void stopThreadedRead() {PIThread::terminate();} + void stopThreadedRead(); //! Return \b true if threaded write is started @@ -187,7 +187,7 @@ public: void startThreadedWrite() {if (!write_thread.isRunning()) write_thread.startOnce();} //! Stop threaded write - void stopThreadedWrite() {write_thread.terminate();} + void stopThreadedWrite(); //! Clear threaded write task queue void clearThreadedWriteQueue() {write_thread.lock(); write_queue.clear(); write_thread.unlock();}