As a follow up of #533 and also detected during #538 #524 tasks, fixed 2 more issues/bugs

* only call this->abandonAndWait() when not in main thread (also slack discussion MS/KB)
* make sure web data service start to read even if setup reader signal was missed
* add timestamp to setupreader to detect "recently read" in case signal is missed
This commit is contained in:
Klaus Basan
2015-12-02 01:01:36 +01:00
parent a863f99c9d
commit 51d4301899
5 changed files with 57 additions and 8 deletions

View File

@@ -8,6 +8,7 @@
*/
#include "threadedreader.h"
#include "blackmisc/threadutils.h"
using namespace BlackMisc;
using namespace BlackMisc::Network;
@@ -48,6 +49,14 @@ namespace BlackMisc
this->m_updateTimestamp = updateTimestamp;
}
bool CThreadedReader::updatedWithinLastMs(qint64 timeLastMs)
{
QDateTime dt(getUpdateTimestamp());
if (dt.isNull() || !dt.isValid()) { return false; }
qint64 delta = QDateTime::currentMSecsSinceEpoch() - dt.toMSecsSinceEpoch();
return delta <= timeLastMs;
}
void CThreadedReader::requestReload()
{
// default implementation, subclasses shall override as required
@@ -56,11 +65,16 @@ namespace BlackMisc
void CThreadedReader::gracefulShutdown()
{
this->abandonAndWait();
// if not in main thread stop, otherwise it makes no sense to abandon
if (!CThreadUtils::isCurrentThreadObjectThread(this))
{
this->abandonAndWait();
}
}
CThreadedReader::~CThreadedReader()
{
gracefulShutdown();
}
void CThreadedReader::setInterval(int updatePeriodMs)