#include "realtimepositioninfothread.h" #include "qdebug.h" /* * @brief 实时接收飞机位置信息子线程,并将位置信息传递给其他线程 */ RealTimePositionInfoThread::RealTimePositionInfoThread(QObject *parent) : QObject{parent} { // showPos_timer.setInterval(200); // showPos_timer.start(); // connect(&showPos_timer,&QTimer::timeout,this,[=](){ // emit sendPos(this->qmapLon[0],this->qmapLat[0],this->qmapHeading[0]); // }); } void RealTimePositionInfoThread::working() { // qDebug()<<"*************************RealTimePositionInfoThread:"<qmapLon[0].size()>=MAX_CONTAINER) // { // mutex.lock(); // removePositionContainer(50); // mutex.unlock(); // } // QThread::msleep(100); // } } //定时任务:发送地形碰撞检测所需位置信息 void RealTimePositionInfoThread::startSendCollisionDetectionPosInfo(int ms) { collisionDetect_timer = new QTimer; connect(collisionDetect_timer,&QTimer::timeout,this,&RealTimePositionInfoThread::collisionDetectTimeout); collisionDetect_timer->start(ms); } //接收实时飞行位置信息 void RealTimePositionInfoThread::receiveRealTimePositionInfo(QList lon, QList lat, QList relativeAlititude, QList heading, QList speed) { // qDebug() << "RealTimePositionThread address: " << QThread::currentThread(); // qDebug()<<"*************************receiveRealTimePositionInfo:"; mutex.lock(); // qDebug()<<"*************************size:"<qmapLon[0].size(); if(this->qmapLon[0].size()>=MAX_CONTAINER) { removePositionContainer(50); } for(int index=0;indexqmapLon[index].append(lon.at(index)); this->qmapLat[index].append(lat.at(index)); this->qmapRelativeAlititude[index].append(relativeAlititude.at(index)); this->qmapHeading[index].append(heading.at(index)); this->qmapSpeed[index].append(speed.at(index)); } mutex.unlock(); } //发送位置信息用于实时显示飞机位置 void RealTimePositionInfoThread::startSendDisplayInfo(int ms) { showPos_timer = new QTimer; connect(showPos_timer,&QTimer::timeout,this,[=](){ // qDebug()<<"*************************RealTimePositionInfoThread:"; emit sendDisplayInfo(this->qmapLon,this->qmapLat,this->qmapHeading); }); showPos_timer->start(ms); } //停止发送数据给碰撞探测子线程 void RealTimePositionInfoThread::stopSendCollisionDetectionPosInfo() { collisionDetect_timer->stop(); delete collisionDetect_timer; } void RealTimePositionInfoThread::receiveTest(int i) { qDebug() << "************************receive i:"<qmapLon.size();i++) { for(int j=0;jqmapLon[i].pop_front(); this->qmapLat[i].pop_front(); this->qmapRelativeAlititude[i].pop_front(); this->qmapHeading[i].pop_front(); this->qmapSpeed[i].pop_front(); } } } void RealTimePositionInfoThread::collisionDetectTimeout() { // qDebug()<<"*****************************collisionDetectTimeout:"; QList lon,lat,relativeAlititude,heading,speed; mutex.lock(); for(int i=0;iqmapLon.keys().size();i++) { lon.append(this->qmapLon[i].takeLast()); lat.append(this->qmapLat[i].takeLast()); relativeAlititude.append(this->qmapRelativeAlititude[i].takeLast()); heading.append(this->qmapHeading[i].takeLast()); speed.append(this->qmapSpeed[i].takeLast()); } mutex.unlock(); emit sendCollisionDetectPosInfo(lon,lat,relativeAlititude,heading,speed); }