You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
map-display/realtimepositioninfothread.cpp

118 lines
3.8 KiB
C++

#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:"<<QThread::currentThread();
// while(true)
// {
// if(this->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<double> lon, QList<double> lat, QList<double> relativeAlititude, QList<double> heading, QList<double> speed)
{
// qDebug() << "RealTimePositionThread address: " << QThread::currentThread();
// qDebug()<<"*************************receiveRealTimePositionInfo:";
mutex.lock();
// qDebug()<<"*************************size:"<<this->qmapLon[0].size();
if(this->qmapLon[0].size()>=MAX_CONTAINER)
{
removePositionContainer(50);
}
for(int index=0;index<lon.size();index++)//飞机数量
{
this->qmapLon[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:"<<i;
}
void RealTimePositionInfoThread::removePositionContainer(int count)
{
for(int i=0;i<this->qmapLon.size();i++)
{
for(int j=0;j<count;j++)
{
this->qmapLon[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<double> lon,lat,relativeAlititude,heading,speed;
mutex.lock();
for(int i=0;i<this->qmapLon.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);
}