假设我们有一个名为Sensor的父类。移动机器人具有多种传感器(例如,凸轮,声纳,激光,GPS等)。每个传感器都有其自己的线程,并且为机器人提供了嘈杂的测量结果。我想模拟这种情况,因此代码可能如下所示

class Robot
{
   update()
   {
       mSensor[i]->update();
   }
   Sensor *mSensor;
}

class Sensor
{
   update();
}

class GPS : public Sensor
{
   Thread mThread();
   update();
}

class CAM : public Sensor
{
   Thread mThread();
   update();
}


在主要功能中,基本上我需要创建一个Robot对象,因此

#include "Robot.h"

int main()
{
   Robot robo;
   while( true ){
     robot.update();
  }
}


我的问题是如何仅通过终止robo对象来确保Sensor的线程被终止?我是否必须通过父析构函数中的某种循环遍历所有传感器对象?

最佳答案

首先,不要使用Sensor *mSensor;,而是使用std::vector<std::unique_ptr<Sensor>>。其次,每个传感器的析构函数应结束线程。然后,当Robot类被破坏时,向量将被破坏,这将调用向量中所有传感器的析构函数。

关于c++ - 如何仅通过终止其父对象来退出子对象的独立线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31615785/

10-11 00:03