我有以下Thread.cpp:
while (1)
{
rplidar_response_measurement_node_t nodes[8192];
size_t count = _countof(nodes);
op_result = drv->grabScanData(nodes, count);
if (IS_OK(op_result))
{
drv->ascendScanData(nodes, count);
for (int pos = 0; pos < (int)count ; ++pos)
{
nodes[pos].sync_quality & RPLIDAR_RESP_MEASUREMENT_SYNCBIT;
nodes[pos].angle_q6_checkbit >> RPLIDAR_RESP_MEASUREMENT_ANGLE_SHIFT/64.0f;
nodes[pos].distance_q2/4.0f;
nodes[pos].sync_quality >> RPLIDAR_RESP_MEASUREMENT_QUALITY_SHIFT;
}
}
}
return ;
}
Motion Thread.cpp
void Motion::Synchronization(QString motiontype)
{
if(motiontype == START)
{
if(269<Thread::angle_q6_checkbit && Thread::angle_q6_checkbit <271)
{
if(Thread::distance_q2>1200)
{
dist_left=1200;
}
else
{
dist_left=Thread::distance_q2;
}
cout<<"Motion +Stuff+="<< endl;
}
}
}
这不是我的确切代码,这是我将获取数据并将数据存储到变量中的部分。 distance_q2, angle_q6_checkbit
等不是原子变量,因此从其他线程读取和写入它们是不一致的!在同一线程中,如果我尝试打印数据,我将获得正确的读数。输出如下。
现在,我试图获取数据进行处理或其他处理。存储距离,角度质量数据,例如Thread::sync_quality, Thread::angle_q6_checkbit, Thread::distance
从激光数据Thread.cpp
到motion.cpp
线程中获取数据(运动线程中的剪切数据):
cout << "distance "<< Thread::distance_q2 << endl;
cout << "angle "<< Thread::angle_q6_checkbit << endl;
cout << "quality level "<< int(Thread::sync_qualitylevel) << endl;
我得到的输出不正确(仅获得359度,这也不正确)。我无法总结。现在,上面的输出是:
我试图将其声明为原子的,但看不到任何改进。帮助将不胜感激。