77 lines
1.6 KiB
C++
77 lines
1.6 KiB
C++
#ifndef RM_MAP_THREAD_H
|
|
#define RM_MAP_THREAD_H
|
|
#include "../rm_include.h"
|
|
|
|
#if (TEST_MAP_MOVE_THREAD)
|
|
#include <QThreadPool>
|
|
#include <QObject>
|
|
#include <QQueue>
|
|
class RMMapMove : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
double _lon;
|
|
double _lat;
|
|
double _speed;
|
|
bool _drawLine;
|
|
RMMapMove(double lon, double lat, double speed, bool drawLine) : QObject()
|
|
{
|
|
_lon = lon;
|
|
_lat = lat;
|
|
_speed = speed;
|
|
_drawLine = drawLine;
|
|
}
|
|
};
|
|
|
|
class RMMapUpdater : public QThread
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
QQueue<RMMapMove*> queue;
|
|
void runMove(RMMapMove *move)
|
|
{
|
|
_mutex.lock();
|
|
queue.enqueue(move);
|
|
//printf("queue count:%d",queue.count());
|
|
//qInfo() << "queue.count:" << queue.count();
|
|
_mutex.unlock();
|
|
startQueue();
|
|
}
|
|
void finish()
|
|
{
|
|
wait();
|
|
}
|
|
protected:
|
|
|
|
virtual void startQueue()
|
|
{
|
|
if (!isRunning())
|
|
start(LowPriority); // calls run() in a new thread
|
|
}
|
|
virtual void run()
|
|
{
|
|
_mutex.lock();
|
|
while (!queue.empty())
|
|
{
|
|
_mutex.unlock();
|
|
RMMapMove* move = queue.dequeue();
|
|
double lon = move->_lon;
|
|
double lat = move->_lat;
|
|
double speed = move->_speed;
|
|
bool drawLine = move->_drawLine;
|
|
delete move;
|
|
_mutex.lock();
|
|
|
|
emit moveTo(lon,lat,speed,drawLine);
|
|
}
|
|
_mutex.unlock();
|
|
}
|
|
|
|
private:
|
|
QMutex _mutex;
|
|
signals:
|
|
void moveTo(double lon, double lat, double speed, bool drawLine);
|
|
};
|
|
#endif // TEST_MAP_MOVE_THREAD
|
|
#endif // RM_MAP_THREAD_H
|