瀏覽代碼

driver_radar_contineltal_ARS408_SPR308, for down cpu load.

yuchuli 3 年之前
父節點
當前提交
b9a059da55

+ 2 - 0
src/driver/driver_radar_continental_ARS408_SRR308/cansend_consumer.cpp

@@ -1,5 +1,7 @@
 #include "cansend_consumer.h"
 
+#include <thread>
+
 extern setupConfig_t setupConfig;
 extern iv::msgunit shmCANSend;
 

+ 6 - 0
src/driver/driver_radar_continental_ARS408_SRR308/cansend_producer.cpp

@@ -2,6 +2,8 @@
 
 #include "math.h"
 
+#include <thread>
+
 extern setupConfig_t setupConfig;
 
 extern uint8_t chassisShift;
@@ -211,5 +213,9 @@ void CANSend_Producer::run()
                 break;
             }
         }
+        else
+        {
+            std::this_thread::sleep_for(std::chrono::microseconds(100));//sleep 0.1ms
+        }
     }
 }

+ 46 - 0
src/tool/IVSysMan/cpumem.cpp

@@ -127,6 +127,51 @@ unsigned long get_cpu_proc_occupy(unsigned int pid){
 }
 
 
+//获取CPU占用率
+float get_proc_cpu(unsigned int pid,unsigned long & nLastProcTotal,unsigned long & nLastAllTotal){
+#ifdef IV_OS_UNIX
+    unsigned long totalcputime1;//totalcputime2;
+    unsigned long procputime1;//procputime2;
+
+    totalcputime1=get_cpu_total_occupy();
+    procputime1=get_cpu_proc_occupy(pid);
+
+    float pcpu = 0.0;
+    if(nLastAllTotal == 0)
+    {
+        return 0.0; //if First,Not Count;
+    }
+    else
+    {
+
+        if(totalcputime1 != nLastAllTotal)
+        {
+            pcpu=100.0 * (procputime1-nLastProcTotal)/(totalcputime1-nLastAllTotal);
+        }
+
+        //Save Last For calculation.
+        nLastProcTotal = procputime1;
+        nLastAllTotal = totalcputime1;
+    }
+
+//    usleep(200000);
+
+//    totalcputime2=get_cpu_total_occupy();
+//    procputime2=get_cpu_proc_occupy(pid);
+
+//    float pcpu = 0.0;
+//    if(0 != totalcputime2-totalcputime1){
+//        pcpu=100.0 * (procputime2-procputime1)/(totalcputime2-totalcputime1);
+//    }
+
+    return pcpu;
+#endif
+
+#ifdef IV_OS_WIN
+    return 0;
+#endif
+}
+
 //获取CPU占用率
 float get_proc_cpu(unsigned int pid){
 #ifdef IV_OS_UNIX
@@ -136,6 +181,7 @@ float get_proc_cpu(unsigned int pid){
     totalcputime1=get_cpu_total_occupy();
     procputime1=get_cpu_proc_occupy(pid);
 
+
     usleep(200000);
 
     totalcputime2=get_cpu_total_occupy();

+ 1 - 0
src/tool/IVSysMan/cpumem.h

@@ -1,6 +1,7 @@
 #ifndef CPUMEM_H
 #define CPUMEM_H
 
+float get_proc_cpu(unsigned int pid,unsigned long & nLastProcTotal,unsigned long & nLastAllTotal);
 float get_proc_cpu(unsigned int pid);
 unsigned int get_proc_mem(unsigned int pid);
 unsigned int get_proc_threadnum(unsigned int pid);

+ 1 - 1
src/tool/IVSysMan/progunit.cpp

@@ -7,7 +7,7 @@ void ProgUnit::UpdateResState()
 {
     if(mbRun)
     {
-        mfCPU = get_proc_cpu(mpid);
+        mfCPU = get_proc_cpu(mpid,mnLastProcTotal,mnLastCPUTotal);
         mfMem = get_proc_mem(mpid);
         mfMem = mfMem/1000.0;
         mnThread = get_proc_threadnum(mpid);

+ 4 - 0
src/tool/IVSysMan/progunit.h

@@ -53,6 +53,10 @@ public:
     bool mbSavestdout = false;
 
 
+    unsigned long mnLastCPUTotal = 0;
+    unsigned long mnLastProcTotal = 0;
+
+
 
 
 public: