diff --git a/y_network_neural_network_/include/y_net_neur_net/y_nnn_screen_manager.h b/y_network_neural_network_/include/y_net_neur_net/y_nnn_screen_manager.h index 6857ec2..061d0e0 100644 --- a/y_network_neural_network_/include/y_net_neur_net/y_nnn_screen_manager.h +++ b/y_network_neural_network_/include/y_net_neur_net/y_nnn_screen_manager.h @@ -56,6 +56,8 @@ struct arg_bash{ pthread_t *thread_run_newbash; pthread_t *thread_run_waitbash; + int run_bash; + pthread_mutex_t *mut_bash_var; pthread_cond_t *cond_bash_var; int go_on; diff --git a/y_network_neural_network_/src/y_net_neur_net/y_nnn_manager.c b/y_network_neural_network_/src/y_net_neur_net/y_nnn_manager.c index 97c11b8..99684df 100644 --- a/y_network_neural_network_/src/y_net_neur_net/y_nnn_manager.c +++ b/y_network_neural_network_/src/y_net_neur_net/y_nnn_manager.c @@ -115,7 +115,7 @@ void* runBashPrint(void *arg){ struct arg_run_qlearn_bprint *arg_run=(struct arg_run_qlearn_bprint*)arg; struct RL_agent *rlAgent = arg_run->rlAgent; struct arg_bash *bash_arg = arg_run->bash_arg; - + bash_arg->run_bash=1; struct status_qlearning *qlStatus = rlAgent->status; struct print_params * pprint = rlAgent->pprint; struct vehicle *car = rlAgent->car; @@ -181,6 +181,7 @@ void* runBashPrint(void *arg){ } } printf("debug: end runBashPrint\n"); + bash_arg->run_bash=0; return NULL; } diff --git a/y_network_neural_network_/src/y_net_neur_net/y_nnn_screen_manager.c b/y_network_neural_network_/src/y_net_neur_net/y_nnn_screen_manager.c index ef89a4f..e2b97ac 100644 --- a/y_network_neural_network_/src/y_net_neur_net/y_nnn_screen_manager.c +++ b/y_network_neural_network_/src/y_net_neur_net/y_nnn_screen_manager.c @@ -120,7 +120,7 @@ struct arg_bash *create_arg_bash(){ b_arg->thread_run_newbash=NULL; b_arg->thread_run_waitbash=NULL; - + b_arg->run_bash=0; return b_arg; } @@ -191,12 +191,12 @@ void free_arg_bash(struct arg_bash *arg){ free(arg->thread_launch); } if(arg->thread_run_newbash){ - if(ret_check_down_bash_new == 0) + if(arg->run_bash && ret_check_down_bash_new == 0) pthread_join(*(arg->thread_run_newbash),NULL); free(arg->thread_run_newbash); } if(arg->thread_run_waitbash){ - if(ret_check_down_bash_current==0) + if(arg->run_bash && ret_check_down_bash_current==0) pthread_join(*(arg->thread_run_waitbash),NULL); free(arg->thread_run_waitbash); } @@ -277,7 +277,7 @@ void kill_all_bash(struct arg_bash *arg){ } pthread_mutex_unlock(arg->mut_bash_var); if(arg->thread_run_newbash){ - if(ret_check_down_bash_new == 0){ + if(ret_check_down_bash_new == 0 && arg->go_on){ printf("debug: join thread_run_newbash\n"); pthread_join(*(arg->thread_run_newbash),NULL); }else @@ -286,7 +286,7 @@ void kill_all_bash(struct arg_bash *arg){ arg->thread_run_newbash=NULL; } if(arg->thread_run_waitbash){ - if(ret_check_down_bash_current == 0){ + if(ret_check_down_bash_current == 0 && arg->go_on){ printf("debug: join thread_run_waitbash\n"); pthread_join(*(arg->thread_run_waitbash),NULL); }else