Commit 1220da39 authored by Don Gagne's avatar Don Gagne

Merge pull request #1376 from dogmaphobic/tileWork

Cleaning up Tile Cache Queue
parents ff6f9101 f82726cf
...@@ -28,45 +28,39 @@ ...@@ -28,45 +28,39 @@
//#define DEBUG_TILECACHEQUEUE //#define DEBUG_TILECACHEQUEUE
#ifndef DEBUG_TILECACHEQUEUE
#undef qDebug
#define qDebug QT_NO_QDEBUG_MACRO
#endif
namespace core { namespace core {
TileCacheQueue::TileCacheQueue() TileCacheQueue::TileCacheQueue()
{ {
} }
TileCacheQueue::~TileCacheQueue() TileCacheQueue::~TileCacheQueue()
{ {
// QThread::wait(10000); quit();
_waitc.wakeAll();
wait();
this->deleteLater();
} }
void TileCacheQueue::EnqueueCacheTask(CacheItemQueue *task) void TileCacheQueue::EnqueueCacheTask(CacheItemQueue *task)
{ {
#ifdef DEBUG_TILECACHEQUEUE
qDebug()<<"DB Do I EnqueueCacheTask"<<task->GetPosition().X()<<","<<task->GetPosition().Y(); qDebug()<<"DB Do I EnqueueCacheTask"<<task->GetPosition().X()<<","<<task->GetPosition().Y();
#endif //DEBUG_TILECACHEQUEUE if(!_tileCacheQueue.contains(task)) {
if(!tileCacheQueue.contains(task))
{
#ifdef DEBUG_TILECACHEQUEUE
qDebug()<<"EnqueueCacheTask"<<task->GetPosition().X()<<","<<task->GetPosition().Y(); qDebug()<<"EnqueueCacheTask"<<task->GetPosition().X()<<","<<task->GetPosition().Y();
#endif //DEBUG_TILECACHEQUEUE _mutex.lock();
mutex.lock(); _tileCacheQueue.enqueue(task);
tileCacheQueue.enqueue(task); _mutex.unlock();
mutex.unlock(); if(this->isRunning()) {
if(this->isRunning())
{
#ifdef DEBUG_TILECACHEQUEUE
qDebug()<<"Wake Thread"; qDebug()<<"Wake Thread";
#endif //DEBUG_TILECACHEQUEUE _waitc.wakeAll();
//this->start(QThread::NormalPriority); } else {
//waitmutex.lock();
waitc.wakeAll();
//waitmutex.unlock();
}
else
{
#ifdef DEBUG_TILECACHEQUEUE
qDebug()<<"Start Thread"; qDebug()<<"Start Thread";
#endif //DEBUG_TILECACHEQUEUE
this->start(QThread::NormalPriority); this->start(QThread::NormalPriority);
} }
} }
...@@ -74,59 +68,35 @@ void TileCacheQueue::EnqueueCacheTask(CacheItemQueue *task) ...@@ -74,59 +68,35 @@ void TileCacheQueue::EnqueueCacheTask(CacheItemQueue *task)
} }
void TileCacheQueue::run() void TileCacheQueue::run()
{ {
#ifdef DEBUG_TILECACHEQUEUE
qDebug()<<"Cache Engine Start"; qDebug()<<"Cache Engine Start";
#endif //DEBUG_TILECACHEQUEUE while(true) {
while(true) CacheItemQueue *task = NULL;
{ qDebug() << "Cache";
CacheItemQueue *task; if(_tileCacheQueue.count() > 0) {
#ifdef DEBUG_TILECACHEQUEUE _mutex.lock();
qDebug()<<"Cache"; task = _tileCacheQueue.dequeue();
#endif //DEBUG_TILECACHEQUEUE _mutex.unlock();
if(tileCacheQueue.count()>0) Q_ASSERT(task);
{ qDebug() << "Cache engine Put:" << task->GetPosition().X() << "," << task->GetPosition().Y();
mutex.lock(); Cache* cache = Cache::Instance();
task=tileCacheQueue.dequeue(); if(cache) {
mutex.unlock(); cache->ImageCache.PutImageToCache(task->GetImg(), task->GetMapType(), task->GetPosition(), task->GetZoom());
#ifdef DEBUG_TILECACHEQUEUE }
qDebug()<<"Cache engine Put:"<<task->GetPosition().X()<<","<<task->GetPosition().Y();
#endif //DEBUG_TILECACHEQUEUE
Cache::Instance()->ImageCache.PutImageToCache(task->GetImg(),task->GetMapType(),task->GetPosition(),task->GetZoom());
usleep(44); usleep(44);
delete task; delete task;
} } else {
qDebug() << "Cache engine BEGIN WAIT";
else _waitmutex.lock();
{ _waitc.wait(&_waitmutex);
#ifdef DEBUG_TILECACHEQUEUE qDebug() << "Cache engine WOKE UP";
qDebug()<<"Cache engine BEGIN WAIT"; if(!this->isRunning()) {
#endif //DEBUG_TILECACHEQUEUE _waitmutex.unlock();
waitmutex.lock(); break;
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();
} }
#ifdef DEBUG_TILECACHEQUEUE _waitmutex.unlock();
qDebug()<<"Cache Engine DID NOT TimeOut";
#endif //DEBUG_TILECACHEQUEUE
waitmutex.unlock();
} }
} }
#ifdef DEBUG_TILECACHEQUEUE qDebug() << "Cache Engine Stopped";
qDebug()<<"Cache Engine Stopped";
#endif //DEBUG_TILECACHEQUEUE
} }
} }
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
#include "pureimagecache.h" #include "pureimagecache.h"
#include "cache.h" #include "cache.h"
namespace core { namespace core {
class TileCacheQueue:public QThread class TileCacheQueue:public QThread
{ {
...@@ -47,13 +46,12 @@ namespace core { ...@@ -47,13 +46,12 @@ namespace core {
~TileCacheQueue(); ~TileCacheQueue();
void EnqueueCacheTask(CacheItemQueue *task); void EnqueueCacheTask(CacheItemQueue *task);
protected:
QQueue<CacheItemQueue*> tileCacheQueue;
private: private:
void run(); void run();
QMutex mutex; QMutex _mutex;
QMutex waitmutex; QMutex _waitmutex;
QWaitCondition waitc; QWaitCondition _waitc;
QQueue<CacheItemQueue*> _tileCacheQueue;
}; };
} }
#endif // TILECACHEQUEUE_H #endif // TILECACHEQUEUE_H
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment