version 4.0.0_alpha

in almost all methods removed timeouts in milliseconds, replaced to PISystemTime
PITimer rewrite, remove internal impl, now only thread implementation, API similar to PIThread
PITimer API no longer pass void*
PIPeer, PIConnection improved stability on reinit and exit
PISystemTime new methods
pisd now exit without hanging
This commit is contained in:
2024-07-30 14:18:02 +03:00
parent f07c9cbce8
commit 1c7fc39b6c
58 changed files with 677 additions and 1191 deletions

View File

@@ -28,7 +28,7 @@
#include "piinit.h"
#include "piqueue.h"
#include "pitimer.h"
#include "pithread.h"
/// TODO: написать документацию, тут ничего не понятно
// function executed from threaded read, pass readedData, sizeOfData, ThreadedReadData
@@ -201,21 +201,17 @@ public:
//! \~russian Устанавливает возможность вызова \a open() при потоковом чтении на закрытом устройстве
void setReopenEnabled(bool yes = true);
//! \~english Set timeout in milliseconds between \a open() tryings if reopen is enabled
//! \~russian Устанавливает задержку в миллисекундах между вызовами \a open() если переоткрытие активно
void setReopenTimeout(int msecs);
//! \~english Set timeout between \a open() tryings if reopen is enabled
//! \~russian Устанавливает задержку между вызовами \a open() если переоткрытие активно
void setReopenTimeout(PISystemTime timeout) { setReopenTimeout(timeout.toMilliseconds()); }
void setReopenTimeout(PISystemTime timeout);
//! \~english Returns reopen enable
//! \~russian Возвращает активно ли переоткрытие
bool isReopenEnabled() const { return property("reopenEnabled").toBool(); }
//! \~english Returns reopen timeout in milliseconds
//! \~russian Возвращает задержку переоткрытия в миллисекундах
int reopenTimeout() { return property("reopenTimeout").toInt(); }
//! \~english Returns reopen timeout
//! \~russian Возвращает задержку переоткрытия
PISystemTime reopenTimeout() { return property("reopenTimeout").toSystemTime(); }
//! \~english Set threaded read callback
@@ -266,13 +262,9 @@ public:
//! \~russian Старайтесь не использовать! Этот метод может привести к повреждению памяти!
void terminateThreadedRead();
//! \~english Wait for threaded read finish no longer than "timeout_ms" milliseconds.
//! \~russian Ожидает завершения потокового чтения в течении не более "timeout_ms" миллисекунд.
bool waitThreadedReadFinished(int timeout_ms = -1);
//! \~english Wait for threaded read finish no longer than "timeout".
//! \~russian Ожидает завершения потокового чтения в течении не более "timeout".
bool waitThreadedReadFinished(PISystemTime timeout) { return waitThreadedReadFinished(timeout.toMilliseconds()); }
bool waitThreadedReadFinished(PISystemTime timeout = {});
//! \~english Returns if threaded write is started
@@ -294,13 +286,9 @@ public:
//! \~russian Старайтесь не использовать! Этот метод может привести к повреждению памяти!
void terminateThreadedWrite();
//! \~english Wait for threaded write finish no longer than "timeout_ms" milliseconds.
//! \~russian Ожидает завершения потоковой записи в течении не более "timeout_ms" миллисекунд.
bool waitThreadedWriteFinished(int timeout_ms = -1);
//! \~english Wait for threaded write finish no longer than "timeout".
//! \~russian Ожидает завершения потоковой записи в течении не более "timeout".
bool waitThreadedWriteFinished(PISystemTime timeout) { return waitThreadedWriteFinished(timeout.toMilliseconds()); }
bool waitThreadedWriteFinished(PISystemTime timeout = {});
//! \~english Clear threaded write task queue
//! \~russian Очищает очередь потоковой записи
@@ -317,11 +305,7 @@ public:
//! \~english Stop both threaded read and threaded write and wait for finish.
//! \~russian Останавливает потоковое чтение и запись и ожидает завершения.
void stopAndWait(int timeout_ms = -1);
//! \~english Stop both threaded read and threaded write and wait for finish.
//! \~russian Останавливает потоковое чтение и запись и ожидает завершения.
void stopAndWait(PISystemTime timeout) { return stopAndWait(timeout.toMilliseconds()); }
void stopAndWait(PISystemTime timeout = {});
//! \~english Interrupt blocking operation.
//! \~russian Прерывает блокирующую операцию.
@@ -355,15 +339,9 @@ public:
//! \~russian Пишет в устройство не более "max_size" байт из "data"
ssize_t write(const void * data, ssize_t max_size);
//! \~english Read from device for "timeout_ms" milliseconds and return readed data as PIByteArray.
//! Timeout should to be greater than 0
//! \~russian Читает из устройства в течении "timeout_ms" миллисекунд и возвращает данные как PIByteArray.
//! Таймаут должен быть больше 0
PIByteArray readForTime(double timeout_ms);
//! \~english Read from device for "timeout" and return readed data as PIByteArray.
//! \~russian Читает из устройства в течении "timeout" и возвращает данные как PIByteArray.
PIByteArray readForTime(PISystemTime timeout) { return readForTime(timeout.toMilliseconds()); }
PIByteArray readForTime(PISystemTime timeout);
//! \~english Add task to threaded write queue and return task ID
@@ -506,8 +484,8 @@ public:
//! \~russian setReopenEnabled, по умолчанию "true"
bool reopenEnabled;
//! \~english setReopenTimeout in milliseconds, default 1000
//! \~russian setReopenTimeout в миллисекундах, по умолчанию 1000
//! \~english setReopenTimeout, default 1_s
//! \~russian setReopenTimeout, по умолчанию 1_s
int reopenTimeout;
//! \~english setThreadedReadBufferSize in bytes, default 4096
@@ -609,8 +587,9 @@ private:
PIThread read_thread, write_thread;
PIByteArray buffer_in, buffer_tr;
PIQueue<PIPair<PIByteArray, ullong>> write_queue;
PISystemTime reopen_timeout;
ullong tri = 0;
uint threaded_read_buffer_size, reopen_timeout = 1000;
uint threaded_read_buffer_size;
bool reopen_enabled = true, destroying = false;
static PIMutex nfp_mutex;