From f82726cf749aad08d69206ccc4d641a8514b6ee4 Mon Sep 17 00:00:00 2001 From: dogmaphobic Date: Thu, 19 Mar 2015 11:24:53 -0400 Subject: [PATCH] Cleaning up Tile Cache Queue --- libs/opmapcontrol/src/core/tilecachequeue.cpp | 112 +++++++----------- libs/opmapcontrol/src/core/tilecachequeue.h | 10 +- 2 files changed, 45 insertions(+), 77 deletions(-) diff --git a/libs/opmapcontrol/src/core/tilecachequeue.cpp b/libs/opmapcontrol/src/core/tilecachequeue.cpp index db8e4d4b9..d50755d8e 100644 --- a/libs/opmapcontrol/src/core/tilecachequeue.cpp +++ b/libs/opmapcontrol/src/core/tilecachequeue.cpp @@ -28,45 +28,39 @@ //#define DEBUG_TILECACHEQUEUE - + +#ifndef DEBUG_TILECACHEQUEUE +#undef qDebug +#define qDebug QT_NO_QDEBUG_MACRO +#endif + namespace core { TileCacheQueue::TileCacheQueue() { } + TileCacheQueue::~TileCacheQueue() { - // QThread::wait(10000); + quit(); + _waitc.wakeAll(); + wait(); + this->deleteLater(); } void TileCacheQueue::EnqueueCacheTask(CacheItemQueue *task) { -#ifdef DEBUG_TILECACHEQUEUE qDebug()<<"DB Do I EnqueueCacheTask"<GetPosition().X()<<","<GetPosition().Y(); -#endif //DEBUG_TILECACHEQUEUE - if(!tileCacheQueue.contains(task)) - { -#ifdef DEBUG_TILECACHEQUEUE + if(!_tileCacheQueue.contains(task)) { qDebug()<<"EnqueueCacheTask"<GetPosition().X()<<","<GetPosition().Y(); -#endif //DEBUG_TILECACHEQUEUE - mutex.lock(); - tileCacheQueue.enqueue(task); - mutex.unlock(); - if(this->isRunning()) - { -#ifdef DEBUG_TILECACHEQUEUE + _mutex.lock(); + _tileCacheQueue.enqueue(task); + _mutex.unlock(); + if(this->isRunning()) { qDebug()<<"Wake Thread"; -#endif //DEBUG_TILECACHEQUEUE - //this->start(QThread::NormalPriority); - //waitmutex.lock(); - waitc.wakeAll(); - //waitmutex.unlock(); - } - else - { -#ifdef DEBUG_TILECACHEQUEUE + _waitc.wakeAll(); + } else { qDebug()<<"Start Thread"; -#endif //DEBUG_TILECACHEQUEUE this->start(QThread::NormalPriority); } } @@ -74,59 +68,35 @@ void TileCacheQueue::EnqueueCacheTask(CacheItemQueue *task) } void TileCacheQueue::run() { -#ifdef DEBUG_TILECACHEQUEUE qDebug()<<"Cache Engine Start"; -#endif //DEBUG_TILECACHEQUEUE - while(true) - { - CacheItemQueue *task; -#ifdef DEBUG_TILECACHEQUEUE - qDebug()<<"Cache"; -#endif //DEBUG_TILECACHEQUEUE - if(tileCacheQueue.count()>0) - { - mutex.lock(); - task=tileCacheQueue.dequeue(); - mutex.unlock(); -#ifdef DEBUG_TILECACHEQUEUE - qDebug()<<"Cache engine Put:"<GetPosition().X()<<","<GetPosition().Y(); -#endif //DEBUG_TILECACHEQUEUE - Cache::Instance()->ImageCache.PutImageToCache(task->GetImg(),task->GetMapType(),task->GetPosition(),task->GetZoom()); + while(true) { + CacheItemQueue *task = NULL; + qDebug() << "Cache"; + if(_tileCacheQueue.count() > 0) { + _mutex.lock(); + task = _tileCacheQueue.dequeue(); + _mutex.unlock(); + Q_ASSERT(task); + qDebug() << "Cache engine Put:" << task->GetPosition().X() << "," << task->GetPosition().Y(); + Cache* cache = Cache::Instance(); + if(cache) { + cache->ImageCache.PutImageToCache(task->GetImg(), task->GetMapType(), task->GetPosition(), task->GetZoom()); + } usleep(44); delete task; - } - - else - { - #ifdef DEBUG_TILECACHEQUEUE - qDebug()<<"Cache engine BEGIN WAIT"; - #endif //DEBUG_TILECACHEQUEUE - waitmutex.lock(); - int tout=4000; - if(!waitc.wait(&waitmutex,tout)) - { - waitmutex.unlock(); -#ifdef DEBUG_TILECACHEQUEUE - qDebug()<<"Cache Engine TimeOut"; -#endif //DEBUG_TILECACHEQUEUE - mutex.lock(); - if(tileCacheQueue.count()==0) - { - mutex.unlock(); - break; - } - mutex.unlock(); + } else { + qDebug() << "Cache engine BEGIN WAIT"; + _waitmutex.lock(); + _waitc.wait(&_waitmutex); + qDebug() << "Cache engine WOKE UP"; + if(!this->isRunning()) { + _waitmutex.unlock(); + break; } - #ifdef DEBUG_TILECACHEQUEUE - qDebug()<<"Cache Engine DID NOT TimeOut"; - #endif //DEBUG_TILECACHEQUEUE - waitmutex.unlock(); + _waitmutex.unlock(); } } -#ifdef DEBUG_TILECACHEQUEUE - qDebug()<<"Cache Engine Stopped"; -#endif //DEBUG_TILECACHEQUEUE + qDebug() << "Cache Engine Stopped"; } - } diff --git a/libs/opmapcontrol/src/core/tilecachequeue.h b/libs/opmapcontrol/src/core/tilecachequeue.h index 7842256cf..45230a386 100644 --- a/libs/opmapcontrol/src/core/tilecachequeue.h +++ b/libs/opmapcontrol/src/core/tilecachequeue.h @@ -37,7 +37,6 @@ #include "pureimagecache.h" #include "cache.h" - namespace core { class TileCacheQueue:public QThread { @@ -47,13 +46,12 @@ namespace core { ~TileCacheQueue(); void EnqueueCacheTask(CacheItemQueue *task); - protected: - QQueue tileCacheQueue; private: void run(); - QMutex mutex; - QMutex waitmutex; - QWaitCondition waitc; + QMutex _mutex; + QMutex _waitmutex; + QWaitCondition _waitc; + QQueue _tileCacheQueue; }; } #endif // TILECACHEQUEUE_H -- 2.22.0