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