#ifndef RM_MAP_THREAD_H #define RM_MAP_THREAD_H #include "../rm_include.h" #if (TEST_MAP_MOVE_THREAD) #include #include #include 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 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