Browse Source

change decition_brain_sf. for add ivexit.

yuchuli 3 years ago
parent
commit
ef1ad57f60

+ 31 - 1
src/decition/common/main.cpp

@@ -12,6 +12,13 @@
 
 #include "ivfault.h"
 
+#include "ivexit.h"
+#include <thread>
+
+#include <signal.h>
+
+QCoreApplication * gApp;
+
 iv::Ivchart * givchart;
 
 std::string gstrmemgps;
@@ -24,12 +31,26 @@ std::string gstrmembraincarstate;
 iv::Ivlog * givlog;
 iv::Ivfault * givfault;
 
+void ExitFunc()
+{
+    gApp->quit();
+    std::this_thread::sleep_for(std::chrono::milliseconds(900));
+}
+
+void signal_handler(int sig)
+{
+    if(sig == SIGINT)
+    {
+        ExitFunc();
+    }
+}
 
 int main(int argc, char *argv[])
 {
     RegisterIVBackTrace();
     showversion("decition_brain");
     QCoreApplication a(argc, argv);
+    gApp = &a;
 
     givfault = new iv::Ivfault("decition_brain_sf");
 
@@ -60,5 +81,14 @@ int main(int argc, char *argv[])
     iv::decition::BrainDecition brain;
     brain.inialize();
     brain.start();
-    return a.exec();
+
+    iv::ivexit::RegIVExitCall(ExitFunc);
+
+    signal(SIGINT,signal_handler);
+
+    int nrc =  a.exec();
+
+    brain.stop();
+
+    return nrc;
 }

+ 4 - 0
src/decition/common/perception_sf/eyes.cpp

@@ -8,6 +8,10 @@ iv::perception::Eyes::Eyes() {
 }
 iv::perception::Eyes::~Eyes() {
 
+    delete sensor_gps;
+//    delete sensor_camera;
+//    delete sensor_radar;
+    delete sensor_lidar;
 }
 
 void iv::perception::Eyes::inialize() {

+ 1 - 1
src/decition/common/perception_sf/impl_gps.cpp

@@ -53,7 +53,7 @@ void iv::perception::GPSSensor::processSensor()
 
 	//iv::CarStatus currentCarStatus;
 	//ODS("\n\n\n------>thread gps: %X\n\n\n\n", GetCurrentThreadId());
-	while (true) {
+    while (!boost::this_thread::interruption_requested()) {
         int rec = 0;
         if(udpsocket->hasPendingDatagrams())
         {

+ 3 - 0
src/decition/common/perception_sf/sensor_gps.cpp

@@ -39,6 +39,9 @@ iv::perception::GPSSensor::GPSSensor() {
 }
 iv::perception::GPSSensor::~GPSSensor() {
 
+    thread_sensor_run_->interrupt();
+    iv::modulecomm::Unregister(mpagpsimu);
+    std::cout<<"~GPSSensor()"<<std::endl;
 }
 
 void iv::perception::GPSSensor::start()

+ 3 - 1
src/decition/common/perception_sf/sensor_lidar.cpp

@@ -17,7 +17,9 @@ iv::perception::LiDARSensor::LiDARSensor() {
     JiGuangLeiDa = boost::shared_ptr<std::vector<iv::ObstacleBasic>>(new std::vector<iv::ObstacleBasic>);
 }
 iv::perception::LiDARSensor::~LiDARSensor() {
-
+//    iv::modulecomm::Unregister(mpa);
+//    iv::modulecomm::Unregister(mpb);
+    std::cout<<"~LiDARSensor()"<<std::endl;
 }
 
 void ListenPer(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname)

+ 22 - 2
src/decition/decition_brain_sf/decition/brain.cpp

@@ -138,7 +138,7 @@ iv::decition::BrainDecition::BrainDecition()
     mpamapreq = iv::modulecomm::RegisterSend("mapreq",1000,1);
 
     ModuleFun funchassis =std::bind(&iv::decition::BrainDecition::UpdateChassis,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,std::placeholders::_4,std::placeholders::_5);
-    void * pa = iv::modulecomm::RegisterRecvPlus(gstrmemchassis.data(),funchassis);
+    mpaChassis = iv::modulecomm::RegisterRecvPlus(gstrmemchassis.data(),funchassis);
 
 
     ModuleFun fungroupgrpc =std::bind(&iv::decition::BrainDecition::UpdateGRPCGroupMsg,this,std::placeholders::_1,std::placeholders::_2,std::placeholders::_3,std::placeholders::_4,std::placeholders::_5);
@@ -156,6 +156,25 @@ iv::decition::BrainDecition::BrainDecition()
 
 iv::decition::BrainDecition::~BrainDecition()
 {
+
+    iv::modulecomm::Unregister(mpaObsTraceRight);
+    iv::modulecomm::Unregister(mpaObsTraceLeft);
+    iv::modulecomm::Unregister(mpaPlanTrace);
+    iv::modulecomm::Unregister(mpaChassis);
+    iv::modulecomm::Unregister(mpamapreq);
+    iv::modulecomm::Unregister(mpaGroup);
+    iv::modulecomm::Unregister(mpaPlatform);
+    iv::modulecomm::Unregister(mpaHMI);
+    iv::modulecomm::Unregister(mpaDecition);
+    iv::modulecomm::Unregister(mpaToPlatform);
+    iv::modulecomm::Unregister(mpfusion);
+    iv::modulecomm::Unregister(mpaCarstate);
+    iv::modulecomm::Unregister(mpaVechicleState);
+    iv::modulecomm::Unregister(mpvbox);
+    iv::modulecomm::Unregister(mpa);
+
+    delete eyes;
+    std::cout<<"Brain Unialize."<<std::endl;
 }
 
 
@@ -443,7 +462,8 @@ void iv::decition::BrainDecition::run() {
 
 
     givfault->SetFaultState(0,0,"OK.");
-    while (eyes->isAllSensorRunning())
+
+    while (eyes->isAllSensorRunning() &&(!boost::this_thread::interruption_requested()))
     {
         if(navigation_data.size() <1)
         {

+ 1 - 0
src/decition/decition_brain_sf/decition/brain.h

@@ -152,6 +152,7 @@ namespace iv {
             void * mpaPlatform;
             void *mpaGroup;
             void * mpmapChangeSig;
+            void * mpaChassis;
             std::string mstrmemmap_index;
 
             int mnOldTime;

+ 1 - 1
src/decition/decition_brain_sf/decition_brain_sf.pro

@@ -2,7 +2,7 @@ QT -= gui
 
 QT += network dbus xml
 
-#CONFIG += c++11 console
+CONFIG += c++11 console
 CONFIG -= app_bundle
 
 # The following define makes your compiler emit warnings if you use