first commit
This commit is contained in:
76
project/fm_viewer/ui/rm_map_thread.h
Normal file
76
project/fm_viewer/ui/rm_map_thread.h
Normal file
@@ -0,0 +1,76 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user