Files
fmviewer3/project/fm_viewer/ui/rm_map_thread.h
2026-02-21 17:11:31 +09:00

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