线程操作加锁

This commit is contained in:
hm
2021-11-10 17:20:09 +08:00
parent f8bca7fabf
commit 7ec108c5dc
21 changed files with 262 additions and 2145 deletions
+12 -5
View File
@@ -63,14 +63,14 @@ void ParameterProcess::process()//线程函数
while (running_flag)
{
count ++;
QThread::msleep(1000.0/running_frq);
//QThread::msleep(1000.0/running_frq);
switch(status.m_Mode)
{
default:
case Nop_Mode :break;
case RecieveMode : ReadStateMachine();break;
case TransmitMode : WriteStateMachine();break;
case Nop_Mode : QThread::yieldCurrentThread();break;
case RecieveMode : ReadStateMachine();QApplication::processEvents();break;
case TransmitMode : WriteStateMachine();QApplication::processEvents();break;
}
}
@@ -176,6 +176,7 @@ void ParameterProcess::Parse(mavlink_message_t msg)
status.transmit.isWaitingforValue = false;
qDebug() << "param_value" << param_value.param_index << param_value.param_value;
emit showMessage(tr("recieve parameter %1 %2").arg(param_value.param_id).arg(param_value.param_value));
}break;
case MAVLINK_MSG_ID_PARAM_EXT_ACK:{
mavlink_msg_param_ext_ack_decode(&msg,&param_ext_ack);
@@ -216,6 +217,8 @@ void ParameterProcess::ReadStateMachine(void)//一整列
qDebug() << "start reading parameter";
status.recieve.isWaitingforValue = true;
emit showMessage(tr("Start Reading Parameters,use All Mode"));
request_list();//一整列,也可以一个,龚老师飞控并不支持这个
step++;
@@ -235,16 +238,19 @@ void ParameterProcess::ReadStateMachine(void)//一整列
if(status.recieve.type == _readtype::All)//如果是ALL的情况下,那么再用单独一个一个去请求一次
{
emit showMessage(tr("Start Reading Parameters,use One Mode"));
qDebug() << "try One mode";
status.recieve.type =_readtype::One;
status.recieve.isWaitingforValue = true;
time = QTime::currentTime().msecsSinceStartOfDay();
request_read("xxx",0);//读取0
}
else
{
step = 2;
qDebug() << "parameter read fail";
emit showMessage(tr("Fail to Read Parameters"));
}
}
else//如果没有超时
@@ -282,6 +288,7 @@ void ParameterProcess::ReadStateMachine(void)//一整列
//停止线程,不能停止
//stop();
emit showMessage(tr("Reading parameters complete"));
}
}
@@ -296,7 +303,7 @@ void ParameterProcess::WriteStateMachine(void)
{
//向其他线程或者自己读取航点的数量
status.transmit.isWaitingforValue = true;
emit showMessage(tr("write parameter %1,%2").arg(param_set.param_id).arg(param_set.param_value));
set(param_set.param_id,param_set.param_type,param_set.param_value);//发送一个参数
time = QTime::currentTime().msecsSinceStartOfDay();
step++;//下一个阶段