优化线程退出
This commit is contained in:
parent
ff342c1f05
commit
4e48a403e5
@ -70,4 +70,6 @@ extern std::string filename;
|
|||||||
extern int d_file;
|
extern int d_file;
|
||||||
extern Direction drive_mode;
|
extern Direction drive_mode;
|
||||||
extern TaskStatus task_status;
|
extern TaskStatus task_status;
|
||||||
|
extern int thread_exit_flag; // 线程退出标志
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -37,6 +37,7 @@ int last_mode = 0;
|
|||||||
|
|
||||||
Direction drive_mode = Direction::STRAIGHT_D;
|
Direction drive_mode = Direction::STRAIGHT_D;
|
||||||
TaskStatus task_status = TaskStatus::PENDING;
|
TaskStatus task_status = TaskStatus::PENDING;
|
||||||
|
int thread_exit_flag = 0; // 线程退出标志,0=继续运行,1=需要退出
|
||||||
|
|
||||||
// 返回单位:m
|
// 返回单位:m
|
||||||
double ntzx_GPS_length(double lonti1, double lati1, double lonti2, double lati2)
|
double ntzx_GPS_length(double lonti1, double lati1, double lonti2, double lati2)
|
||||||
@ -202,13 +203,14 @@ Direction straight_or_turn(double cur_direction, double des_direction, int thres
|
|||||||
void PL_ProcThread()
|
void PL_ProcThread()
|
||||||
{
|
{
|
||||||
usleep(70000);
|
usleep(70000);
|
||||||
|
thread_exit_flag = 0; // 重置退出标志
|
||||||
|
|
||||||
int road_pos = 0;
|
int road_pos = 0;
|
||||||
int des_pos = 3;
|
int des_pos = 3;
|
||||||
int direction_pos = 20;
|
int direction_pos = 20;
|
||||||
auto next_time = std::chrono::steady_clock::now();
|
auto next_time = std::chrono::steady_clock::now();
|
||||||
|
|
||||||
while (1)
|
while (!thread_exit_flag) // 检查线程退出标志
|
||||||
{
|
{
|
||||||
next_time += std::chrono::milliseconds(50);
|
next_time += std::chrono::milliseconds(50);
|
||||||
|
|
||||||
|
|||||||
@ -110,8 +110,13 @@ class pl_node : public rclcpp::Node
|
|||||||
}
|
}
|
||||||
else if (is_start == 1 && msg->task_status == 0)
|
else if (is_start == 1 && msg->task_status == 0)
|
||||||
{
|
{
|
||||||
pthread_cancel(pl_thread_t);
|
thread_exit_flag = 1; // 设置线程退出标志
|
||||||
LOG_INFO("pl_thread_t is canceled");
|
LOG_INFO("请求线程退出...");
|
||||||
|
|
||||||
|
// 等待线程正常退出
|
||||||
|
pthread_join(pl_thread_t, NULL);
|
||||||
|
LOG_INFO("线程已正常退出");
|
||||||
|
|
||||||
is_start = 0;
|
is_start = 0;
|
||||||
task_status = TaskStatus::COMPLETED;
|
task_status = TaskStatus::COMPLETED;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user