diff --git a/libs/opmapcontrol/src/core/tilecachequeue.cpp b/libs/opmapcontrol/src/core/tilecachequeue.cpp index db8e4d4b96230c352ad9c924f902081f826807b3..d50755d8e15f4e0043b14188cdb817612247baf9 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 7842256cf5f32a1e0f2146f6c9a4846f3e804de3..45230a3867d3c1c694105ba71f6cb20fcfdd7134 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