定时器在线程的用法好像很奇怪,需要研究一下

This commit is contained in:
hm
2020-03-13 00:01:48 +08:00
parent cfa8f91a1f
commit f08d717d6f
+22 -35
View File
@@ -6,47 +6,38 @@ void SendMessageTo(uint8_t ch, uint8_t *data,uint16_t len)
qDebug() << data;
}
MissionProcess::MissionProcess(QObject *parent) : QObject(parent)
{
QTimer::singleShot(1000,this, &MissionProcess::mTimerOut);
}
void MissionProcess::mTimerOut()
{
ismTimerTimeOut = true;
qDebug() << ismTimerTimeOut;
qDebug() << QThread::currentThread();
qDebug() << "time out" << ismTimerTimeOut;
}
void MissionProcess::mTimerReset(int time)
{
if(MissionProcess::mTimer != nullptr)
if(mTimer != nullptr)
{
//mTimer->start(time);
mTimer->start(time);
MissionProcess::mTimer->start(time);
if(MissionProcess::mTimer->isActive())
if(mTimer->isActive())
{
qDebug() << "start timer";
}
}
ismTimerTimeOut = false;
}
void MissionProcess::mTimerStop()
{
if(MissionProcess::mTimer != nullptr)
MissionProcess::mTimer->stop();
if(mTimer != nullptr)
{
mTimer->stop();
}
}
void MissionProcess::setRunFrq(uint32_t frq)
@@ -60,9 +51,6 @@ void MissionProcess::setRunFrq(uint32_t frq)
void MissionProcess::start()
{
qDebug() << QThread::currentThreadId();
if(Missionthread == nullptr)
{
Missionthread = new QThread();
@@ -75,9 +63,6 @@ void MissionProcess::start()
running_flag = true;
Missionthread->start();
qDebug() << "thread start" << running_flag;
qDebug() << QThread::currentThreadId();
}
else
{
@@ -102,10 +87,11 @@ void MissionProcess::process()//线程函数
{
uint8_t count = 0;
if(!MissionProcess::mTimer)
if(!mTimer)
{
MissionProcess::mTimer = new QTimer;
connect(MissionProcess::mTimer,&QTimer::timeout,this,&MissionProcess::mTimerOut);
mTimer = new QTimer;
mTimer->moveToThread(Missionthread);
connect(mTimer,&QTimer::timeout,this,&MissionProcess::mTimerOut);
}
while (running_flag)
@@ -131,12 +117,9 @@ void MissionProcess::process()//线程函数
void MissionProcess::SendMessage(mavlink_message_t msg)
{
uint8_t MAVLink_Buf[256+20];
uint16_t MAVLink_Len;
MAVLink_Len = mavlink_msg_to_send_buffer(MAVLink_Buf, &msg);
SendMessageTo(0,MAVLink_Buf, MAVLink_Len);
uint8_t buff[256+20];
uint16_t len = mavlink_msg_to_send_buffer(buff, &msg);
SendMessageTo(0,buff, len);
}
@@ -183,13 +166,17 @@ void MissionProcess::ReadStateMachine(void)
static uint8_t step = 0;
static uint8_t timeout_count = 0;
//定时器好像行不通,需要读取当前时间来做超时
if(step == 0)
{
request_list();//请求读取某一个设备的航线
//mTimerReset(1000);//1秒,如果超时,那么重新发送一次指令
mTimerReset(1000);//1秒,如果超时,那么重新发送一次指令
QTimer::singleShot(1000,this, &MissionProcess::mTimerOut);
qDebug() << this << QThread::currentThread();
step++;//下一个阶段
}
else if(step == 1)//等待收到Count