From 12d987a0e43a8dc014b734cf94885aff6272a1ab Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期四, 17 九月 2020 15:45:31 +0800
Subject: [PATCH] update

---
 algorithm/IndirectAlg.c |   23 ++++++++++++++---------
 1 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/algorithm/IndirectAlg.c b/algorithm/IndirectAlg.c
index 0ad09fd..f0bc6a4 100644
--- a/algorithm/IndirectAlg.c
+++ b/algorithm/IndirectAlg.c
@@ -1,6 +1,7 @@
 #include "usg_common.h"
 #include "IndirectAlg.h"
 #include "graph.h"
+
  
 #define PI 3.14159265
  
@@ -32,15 +33,15 @@
 
 IndirectAlg::IndirectAlg() {}
 
-IndirectAlg::IndirectAlg(const initializer_list<Edge> & edges, const time_t & _keepTime, const Vector2 & _direction): 
-    frame(edges), keepTime(_keepTime), direction(_direction), mterminate(false) {
+IndirectAlg::IndirectAlg(const initializer_list<Edge> & edges,const Vector2 & _direction, const time_t & _keepTime, const double _minDistance): 
+    frame(edges), keepTime(_keepTime), minDistance(_minDistance), direction(_direction), mterminate(false) {
 
     mthread = std::thread(std::bind(&IndirectAlg::threadRoutine, this));
 
 }
 
-IndirectAlg::IndirectAlg(const initializer_list<Point> & points, const time_t & _keepTime, const Vector2 & _direction): 
-    keepTime(_keepTime), direction(_direction), mterminate(false) {
+IndirectAlg::IndirectAlg(const initializer_list<Point> & points, const Vector2 & _direction, const time_t & _keepTime, const double _minDistance): 
+    keepTime(_keepTime), minDistance(_minDistance), direction(_direction), mterminate(false) {
     if (points.size() > 0) {
         std::vector<Edge> edges;
         initializer_list<Point>::iterator iter;
@@ -81,18 +82,21 @@
     while (!mterminate.load()) {
         std::this_thread::sleep_for(std::chrono::seconds(this->keepTime * 2));
         //sleep(this->keepTime);
-        for(iter = statusMap.begin(); iter != statusMap.end(); iter++) {
+        for(iter = statusMap.begin(); iter != statusMap.end();) {
           
             status = iter->second;
             if (status != nullptr) {
                 // cout<< "iter " << iter->first <<' '<< iter->second <<  status->lastTime << endl; 
                // printf("%ld, %ld, %ld\n", time(NULL), status->lastTime, (time(0) - status->lastTime));
-                if((time(NULL) - status->lastTime) > this->keepTime) {
+                if(difftime(time(NULL), status->lastTime) > this->keepTime * 2) {
                     std::cout << status->id << "鑴辩鐩戞帶鍖�, remove from map\n";
                     delete status;
-                    statusMap.erase(iter);
-                }
+
+                    iter = statusMap.erase(iter);
+                    continue;
+                }  
             }
+            iter++;
         }
     }
      
@@ -148,7 +152,8 @@
         status->lastCoordinate = record.coordinate;
     }
 
-    if (currentDirection.x == 0 && currentDirection.y == 0) {
+
+    if (getVecor2Len(currentDirection) <= minDistance) {
         //娌″姩
         printRecord(3, record);
         return false;

--
Gitblit v1.8.0