Bläddra i källkod

change apollo pilot_apollo_bridge_gui. fix switch.

yuchuli 1 månad sedan
förälder
incheckning
e864114b6a

+ 3 - 2
src/apollo/code/pilot_apollo_bridge_gui/cpumem.cpp

@@ -341,12 +341,13 @@ int get_pid(const char* process_name, const char* user = nullptr)
 }
 
 
-
+#include <iostream>
 int get_proc_mem_thread(unsigned  int pid,unsigned int & nmem,unsigned int & nthread)
 {
 #ifdef IV_OS_UNIX
     QFile xFile;
     char strfilename[256];
+    
     snprintf(strfilename,256,"/proc/%d/status",pid);
     xFile.setFileName(strfilename);
     bool bMem = false;
@@ -397,7 +398,7 @@ int get_proc_mem_thread(unsigned  int pid,unsigned int & nmem,unsigned int & nth
                         nmem = QString(baitem[1]).toLong();
                         bMem = true;
                     }
-                    if(baitem[0] == "Thread:")
+                    if(baitem[0] == "Threads:")
                     {
                         nthread = QString(baitem[1]).toLong();
                         bthread = true;

+ 4 - 4
src/apollo/code/pilot_apollo_bridge_gui/groupunit.cpp

@@ -107,13 +107,13 @@ void GroupUnit::CreateTitle()
 
     pLA = new QLabel(mpGroup);
     pLA->setText("Launch");
-    pLA->setGeometry(nXPos,nYPos,190,nHgt);
-    nXPos = nXPos + 200;
+    pLA->setGeometry(nXPos,nYPos,290,nHgt);
+    nXPos = nXPos + 300;
 
     pLA = new QLabel(mpGroup);
     pLA->setText("Module");
-    pLA->setGeometry(nXPos,nYPos,290,nHgt);
-    nXPos = nXPos + 300;
+    pLA->setGeometry(nXPos,nYPos,190,nHgt);
+    nXPos = nXPos + 200;
 
     pLA = new QLabel(mpGroup);
     pLA->setText("Switch");

+ 29 - 0
src/apollo/code/pilot_apollo_bridge_gui/mainwindow.cpp

@@ -2,6 +2,7 @@
 #include "ui_mainwindow.h"
 
 #include <QProcess>
+#include <QTimer>
 
 MainWindow::MainWindow(QWidget *parent)
     : QMainWindow(parent)
@@ -54,6 +55,10 @@ MainWindow::MainWindow(QWidget *parent)
 
     mPM->start();
 
+    QTimer * timer = new QTimer(this);
+    connect(timer,SIGNAL(timeout()),this,SLOT(onTimerState()));
+    timer->start(1000);
+
     setWindowTitle("Pilot Apollo Bridge GUI");
 }
 
@@ -74,6 +79,21 @@ MainWindow::~MainWindow()
     mbtestrun = false;
     mpthreadtest->join();
 
+    mPM->requestInterruption();
+
+    qint64 time;
+    time = QDateTime::currentMSecsSinceEpoch();
+    while((QDateTime::currentMSecsSinceEpoch() - time)<1500)
+    {
+        if(mPM->isFinished())
+        {
+            qDebug("PM finish");
+            break;
+        }
+    }
+
+    delete mPM;
+
 
     std::this_thread::sleep_for(std::chrono::milliseconds(10));
 
@@ -227,6 +247,15 @@ void MainWindow::onProgClick(ProgUnit *pu,ProgramViewUnit * pvu, bool bClick)
     }
 }
 
+void MainWindow::onTimerState()
+{
+//    qDebug("log");
+//    int i;
+//    for(i=0;i<10000;i++)
+//        ivlog->warn("test","adfassssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssadfsadgfgsdfagafdaf");
+    mpCV->UpdateState();
+}
+
 
 
 

+ 3 - 0
src/apollo/code/pilot_apollo_bridge_gui/mainwindow.h

@@ -39,6 +39,9 @@ private slots:
 
     void on_pushButton_StopApollo_clicked();
 
+        /* Timer Update State */
+    void onTimerState();
+
 private slots:
 
      void onProgClick(ProgUnit * pu,ProgramViewUnit * pvu,bool bClick);

+ 2 - 0
src/apollo/code/pilot_apollo_bridge_gui/pilot_apollo_bridge_gui.pro

@@ -10,6 +10,8 @@ CONFIG += c++11
 # deprecated API in order to know how to port your code away from it.
 DEFINES += QT_DEPRECATED_WARNINGS
 
+DEFINES += IV_OS_UNIX
+
 # You can also make your code fail to compile if it uses deprecated APIs.
 # In order to do so, uncomment the following line.
 # You can also select to disable deprecated APIs only up to a certain version of Qt.

+ 22 - 12
src/apollo/code/pilot_apollo_bridge_gui/progmon.cpp

@@ -34,18 +34,14 @@ ProgMon::~ProgMon()
     unsigned int i;
     for(i=0;i<mvectorprog.size();i++)
     {
-        if(mvectorprog[i].mProcess != 0)
+        if((mvectorprog[i].mProcess != 0)&&(mvectorprog[i].mbRun))
         {
-            mvectorprog[i].mProcess->terminate();
-  //          mvectorprog[i].mProcess->close();
-        }
-    }
-    QThread::msleep(300);
-    for(i=0;i<mvectorprog.size();i++)
-    {
-        if(mvectorprog[i].mProcess != 0)
-        {
-            mvectorprog[i].mProcess->kill();
+            ProgUnit * pu = &mvectorprog[i];
+            std::cout<<" stop launch "<<pu->strcmd<<std::endl;
+            QProcess * pproc = new QProcess(this);
+            pproc->start("cyber_launch",QStringList() << "stop"<<pu->strcmd.data());
+            pproc->waitForFinished();
+            pu->mProcess->waitForFinished();
   //          mvectorprog[i].mProcess->close();
         }
     }
@@ -261,9 +257,12 @@ void ProgMon::onProcessStarted()
     {
         if(proc == mvectorprog.at(i).mProcess)
         {
+            std::cout<<" Process Started."<<std::endl;
             mvectorprog.at(i).mbRun = true;
 #ifdef IV_OS_UNIX
-            mvectorprog.at(i).mpid = proc->processId();
+ //           mvectorprog.at(i).mpid = proc->processId();
+            mvectorprog.at(i).mpid_launch = proc->processId();
+            std::cout<<" process id: "<<proc->processId()<<std::endl;
 //            mvectorprog.at(i).mpid = proc->pid();
 #endif
 #ifdef IV_OS_WIN
@@ -349,6 +348,7 @@ void ProgMon::onReadStandardError()
 void ProgMon::onProcessEnd()
 {
     qDebug("process end.");
+    return;
     QProcess * proc = (QProcess *)sender();
     int nsize = mvectorprog.size();
     int i;
@@ -531,9 +531,17 @@ void ProgMon::StartProc(ProgUnit *pu)
     }
     pu->mProcess = new QProcess(this);
 
+    connect(pu->mProcess,SIGNAL(started()),this,SLOT(onProcessStarted()));
+    connect(pu->mProcess,SIGNAL(finished(int)),this,SLOT(onProcessEnd()));
+
     pu->mProcess->start("cyber_launch",QStringList() << "start"<<pu->strcmd.data());
     pu->state = 1;
 
+    pu->mpid = 0;
+    
+
+    
+
 
 //    ivlog->info("start program: AppGroup - %s; AppDir - %s; AppName - %s; StartArgs - %s;", pu->strgroup.c_str(), pu->strappdir.c_str(), pu->strappname.c_str(), pu->strargs.c_str());
 
@@ -556,6 +564,7 @@ void ProgMon::StopProc(ProgUnit *pu)
     std::cout<<" stop launch "<<pu->strcmd<<std::endl;
     pu->mProcess = new QProcess(this);
     pu->mProcess->start("cyber_launch",QStringList() << "stop"<<pu->strcmd.data());
+    pu->mbRun = false;
 }
 
 void ProgMon::ForceStopProc(ProgUnit *pu){
@@ -669,6 +678,7 @@ void ProgMon::run()
 
 
     }
+    std::cout<<"ProgMon Thread Exit."<<std::endl;
 }
 
 void ProgMon::setquit()

+ 31 - 0
src/apollo/code/pilot_apollo_bridge_gui/programviewunit.cpp

@@ -1,5 +1,7 @@
 #include "programviewunit.h"
 
+#include <iostream>
+
 ProgramViewUnit::ProgramViewUnit(QGroupBox * pGroup,ProgUnit * pu, int x,int y)
 {
     QLabel * pLabel;
@@ -135,11 +137,40 @@ void ProgramViewUnit::UpdateState()
 
 //    mPU->UpdateResState();
 
+    if(mPU->mbRun)
+    {
+  //      std::cout<<" Need Get Process ID. lanuch process id: "<<mPU->mpid_launch<< " process id  "<<mPU->mProcess->processId()<<std::endl;
+    }
+    if(mPU->mpid == 0)
+    {
+        std::cout<<" Need Get Process ID. lanuch process id: "<<mPU->mpid_launch<< " process id  "<<mPU->mProcess->processId()<<std::endl;
+        mPU->mProcessGetpid = new QProcess(this);
+        connect(mPU->mProcessGetpid,SIGNAL(readyReadStandardOutput()),this,SLOT(onReadStandardOutput()));
+        mPU->mProcessGetpid->start("pgrep",QStringList()<<"-P"<<QString::number(mPU->mpid_launch));
+    }
+    else
+    {
     mpLECount->setText(QString::number(mPU->mnStartCount));
     mpLEPID->setText(QString::number(mPU->mpid));
     mpLECPU->setText(QString::number(mPU->mfCPU));
     mpLEMem->setText(QString::number(mPU->mfMem));
     mpLEThread->setText(QString::number(mPU->mnThread));
+    }
 
 
 }
+
+void ProgramViewUnit::onReadStandardOutput()
+{
+    QProcess * proc = (QProcess *)sender();
+    if(proc == mPU->mProcessGetpid)
+    {
+    QByteArray ba = proc->readAllStandardOutput();
+    std::cout<<" data: "<<ba.data()<<std::endl;
+    qint64 xpid = atoi(ba.data());
+    if(xpid >  0)
+    {
+        mPU->mpid = xpid;
+    }
+    }
+}

+ 2 - 0
src/apollo/code/pilot_apollo_bridge_gui/programviewunit.h

@@ -42,6 +42,8 @@ private slots:
     void onSwitchClick(bool bClick);
     void onLogSwitchClick(bool bClick);
 
+    void onReadStandardOutput();
+
 signals:
     void progclick(ProgUnit *,ProgramViewUnit * , bool);
 

+ 1 - 1
src/apollo/code/pilot_apollo_bridge_gui/progunit.cpp

@@ -1,6 +1,6 @@
 #include "progunit.h"
 
-
+#include <iostream>
 
 
 void ProgUnit::UpdateResState()

+ 4 - 2
src/apollo/code/pilot_apollo_bridge_gui/progunit.h

@@ -33,7 +33,9 @@ public:
     /* run state */
     bool mbRun = false;
     /* processid */
-    qint64 mpid;
+    qint64 mpid = 0;
+
+    qint64 mpid_launch;
 
     /* Start Count */
     int mnStartCount = 0;
@@ -54,7 +56,7 @@ public:
     unsigned long mnLastCPUTotal = 0;
     unsigned long mnLastProcTotal = 0;
 
-
+    QProcess * mProcessGetpid;
 
 
 public: