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:
@@ -20,9 +20,11 @@
|
||||
#include "piiodevice.h"
|
||||
|
||||
#include "piconfig.h"
|
||||
#include "piconnection.h"
|
||||
#include "piliterals.h"
|
||||
#include "piliterals_bytes.h"
|
||||
#include "piliterals_string.h"
|
||||
#include "piliterals_time.h"
|
||||
#include "pipropertystorage.h"
|
||||
#include "pitime.h"
|
||||
|
||||
|
||||
//! \class PIIODevice piiodevice.h
|
||||
@@ -158,9 +160,9 @@ void PIIODevice::setReopenEnabled(bool yes) {
|
||||
}
|
||||
|
||||
|
||||
void PIIODevice::setReopenTimeout(int msecs) {
|
||||
setProperty("reopenTimeout", msecs);
|
||||
reopen_timeout = msecs;
|
||||
void PIIODevice::setReopenTimeout(PISystemTime timeout) {
|
||||
setProperty("reopenTimeout", timeout);
|
||||
reopen_timeout = timeout;
|
||||
}
|
||||
|
||||
|
||||
@@ -231,11 +233,13 @@ void PIIODevice::terminateThreadedRead() {
|
||||
}
|
||||
|
||||
|
||||
bool PIIODevice::waitThreadedReadFinished(int timeout_ms) {
|
||||
bool PIIODevice::waitThreadedReadFinished(PISystemTime timeout) {
|
||||
PITimeMeasurer tm, tm_intr;
|
||||
while (read_thread.isRunning()) {
|
||||
if (tm.elapsed_m() > timeout_ms) return false;
|
||||
if (tm_intr.elapsed_m() > 100.) {
|
||||
if (timeout.isNotNull()) {
|
||||
if (tm.elapsed() > timeout) return false;
|
||||
}
|
||||
if (tm_intr.elapsed() > 100_ms) {
|
||||
tm_intr.reset();
|
||||
interrupt();
|
||||
}
|
||||
@@ -266,8 +270,8 @@ void PIIODevice::terminateThreadedWrite() {
|
||||
}
|
||||
|
||||
|
||||
bool PIIODevice::waitThreadedWriteFinished(int timeout_ms) {
|
||||
return write_thread.waitForFinish(timeout_ms);
|
||||
bool PIIODevice::waitThreadedWriteFinished(PISystemTime timeout) {
|
||||
return write_thread.waitForFinish(timeout);
|
||||
}
|
||||
|
||||
|
||||
@@ -290,10 +294,10 @@ void PIIODevice::stop() {
|
||||
}
|
||||
|
||||
|
||||
void PIIODevice::stopAndWait(int timeout_ms) {
|
||||
void PIIODevice::stopAndWait(PISystemTime timeout) {
|
||||
stop();
|
||||
waitThreadedReadFinished(timeout_ms);
|
||||
waitThreadedWriteFinished(timeout_ms);
|
||||
waitThreadedReadFinished(timeout);
|
||||
waitThreadedWriteFinished(timeout);
|
||||
}
|
||||
|
||||
|
||||
@@ -327,7 +331,7 @@ void PIIODevice::_init() {
|
||||
opened_ = false;
|
||||
setOptions(0);
|
||||
setReopenEnabled(true);
|
||||
setReopenTimeout(1000);
|
||||
setReopenTimeout(1_s);
|
||||
#ifdef MICRO_PIP
|
||||
threaded_read_buffer_size = 512;
|
||||
#else
|
||||
@@ -375,7 +379,7 @@ void PIIODevice::read_func() {
|
||||
piMSleep(10);
|
||||
bool ok = false;
|
||||
if (reopen_enabled) {
|
||||
if (reopen_tm.elapsed_m() >= reopen_timeout) {
|
||||
if (reopen_tm.elapsed() >= reopen_timeout) {
|
||||
reopen_tm.reset();
|
||||
ok = open();
|
||||
}
|
||||
@@ -394,14 +398,14 @@ void PIIODevice::read_func() {
|
||||
}
|
||||
|
||||
|
||||
PIByteArray PIIODevice::readForTime(double timeout_ms) {
|
||||
PIByteArray PIIODevice::readForTime(PISystemTime timeout) {
|
||||
PIByteArray str;
|
||||
if (timeout_ms <= 0.) return str;
|
||||
if (timeout.isNull()) return str;
|
||||
ssize_t ret;
|
||||
uchar * td = new uchar[threaded_read_buffer_size];
|
||||
bool was_br = setOption(BlockingRead, false);
|
||||
tm.reset();
|
||||
while (tm.elapsed_m() < timeout_ms) {
|
||||
while (tm.elapsed() < timeout) {
|
||||
ret = read(td, threaded_read_buffer_size);
|
||||
if (ret <= 0)
|
||||
piMinSleep();
|
||||
@@ -477,13 +481,13 @@ bool PIIODevice::configure(const PIString & config_file, const PIString & sectio
|
||||
if (ep != 0) {
|
||||
setReopenEnabled(ep->getValue("reopenEnabled", isReopenEnabled(), &ex).toBool());
|
||||
if (!ex) setReopenEnabled(em.getValue("reopenEnabled", isReopenEnabled()).toBool());
|
||||
setReopenTimeout(ep->getValue("reopenTimeout", reopenTimeout(), &ex).toInt());
|
||||
if (!ex) setReopenTimeout(em.getValue("reopenTimeout", reopenTimeout()).toInt());
|
||||
setReopenTimeout(PISystemTime::fromMilliseconds(ep->getValue("reopenTimeout", reopenTimeout().toMilliseconds(), &ex).toInt()));
|
||||
if (!ex) setReopenTimeout(PISystemTime::fromMilliseconds(em.getValue("reopenTimeout", reopenTimeout().toMilliseconds()).toInt()));
|
||||
setThreadedReadBufferSize(ep->getValue("threadedReadBufferSize", int(threaded_read_buffer_size), &ex).toInt());
|
||||
if (!ex) setThreadedReadBufferSize(em.getValue("threadedReadBufferSize", int(threaded_read_buffer_size)).toInt());
|
||||
} else {
|
||||
setReopenEnabled(em.getValue("reopenEnabled", isReopenEnabled()).toBool());
|
||||
setReopenTimeout(em.getValue("reopenTimeout", reopenTimeout()).toInt());
|
||||
setReopenTimeout(PISystemTime::fromMilliseconds(em.getValue("reopenTimeout", reopenTimeout().toMilliseconds()).toInt()));
|
||||
setThreadedReadBufferSize(em.getValue("threadedReadBufferSize", int(threaded_read_buffer_size)).toInt());
|
||||
}
|
||||
return configureDevice(&em, ep);
|
||||
|
||||
Reference in New Issue
Block a user