我用的是 pthread_cancel方法,并且state 和type 也已经设置。
且pthread.h中没有pthread_kill方法
请问该怎么解决这个问题
6 个解决方案
#1
有可能是没pthread_join的原因。
static int restart_monitor()
{
pthread_cancel(monitor_thread);
pthread_join(monitor_thread, NULL);
pthread_create(&monitor_thread, NULL, do_monitor, NULL)
return 0;
}
static int restart_monitor()
{
pthread_cancel(monitor_thread);
pthread_join(monitor_thread, NULL);
pthread_create(&monitor_thread, NULL, do_monitor, NULL)
return 0;
}
#2
我也用了 pthread_join() 函数,可是没有起作用
#3
pthread_kill在signal.h中
pthread_kill(tid, SIGKILL);
pthread_kill(tid, SIGKILL);
#4
但新线程执行到访问数据库的函数时,整个应用就被系统kill掉了。
这里应该检查一下旧线程是否已经正确cancel,另外可能是旧线程访问数据库的一些临时资源没有释放。
这里应该检查一下旧线程是否已经正确cancel,另外可能是旧线程访问数据库的一些临时资源没有释放。
#5
用个笨办法system("kill id")
#6
这个是强制结束进程,而不是线程。
#1
有可能是没pthread_join的原因。
static int restart_monitor()
{
pthread_cancel(monitor_thread);
pthread_join(monitor_thread, NULL);
pthread_create(&monitor_thread, NULL, do_monitor, NULL)
return 0;
}
static int restart_monitor()
{
pthread_cancel(monitor_thread);
pthread_join(monitor_thread, NULL);
pthread_create(&monitor_thread, NULL, do_monitor, NULL)
return 0;
}
#2
我也用了 pthread_join() 函数,可是没有起作用
#3
pthread_kill在signal.h中
pthread_kill(tid, SIGKILL);
pthread_kill(tid, SIGKILL);
#4
但新线程执行到访问数据库的函数时,整个应用就被系统kill掉了。
这里应该检查一下旧线程是否已经正确cancel,另外可能是旧线程访问数据库的一些临时资源没有释放。
这里应该检查一下旧线程是否已经正确cancel,另外可能是旧线程访问数据库的一些临时资源没有释放。
#5
用个笨办法system("kill id")
#6
这个是强制结束进程,而不是线程。