当前位置: 技术问答>linux和unix
大家看看这代码为什么终止不了子线程
来源: 互联网 发布时间:2016-01-03
本文导语: 代码如下,实现功能,主线程等待信号sigusr1,sigusr2.当收到sigusr2启动线程去循环size++, 当收到sigusr1终止掉子线程,停止size++操作。 但是我使用pthread_cancle没法终止线程,size++继续中 static pthread_t thread_id; int main(int a...
代码如下,实现功能,主线程等待信号sigusr1,sigusr2.当收到sigusr2启动线程去循环size++,
当收到sigusr1终止掉子线程,停止size++操作。
但是我使用pthread_cancle没法终止线程,size++继续中
static pthread_t thread_id;
int main(int argc,char **argv)
{
init_sigaction_start();
for(;;)
pause();
}
int sig_handle_stoprecord(int signo)
{
init_sigaction_start();
printf("start11 %dn",thread_id);
pthread_cancel(thread_id);
printf("start %dn",size);
}
void init_sigaction_stop(void)
{
struct sigaction act;
act.sa_handler=sig_handle_stoprecord;
act.sa_flags=0;
sigemptyset(&act.sa_mask);
sigaction(SIGUSR1,&act,NULL);
}
int sig_handle_startrecord(int signo)
{
init_sigaction_stop();
pthread_create(&thread_id, NULL, &recordvideo, NULL);
}
void init_sigaction_start(void)
{
struct sigaction act;
act.sa_handler=sig_handle_startrecord;
act.sa_flags=0;
sigemptyset(&act.sa_mask);
sigaction(SIGUSR2,&act,NULL);
}
void recordvideo(void)
{
printf("gon");
for(;;)
{
size++;
}
//return;
}
当收到sigusr1终止掉子线程,停止size++操作。
但是我使用pthread_cancle没法终止线程,size++继续中
static pthread_t thread_id;
int main(int argc,char **argv)
{
init_sigaction_start();
for(;;)
pause();
}
int sig_handle_stoprecord(int signo)
{
init_sigaction_start();
printf("start11 %dn",thread_id);
pthread_cancel(thread_id);
printf("start %dn",size);
}
void init_sigaction_stop(void)
{
struct sigaction act;
act.sa_handler=sig_handle_stoprecord;
act.sa_flags=0;
sigemptyset(&act.sa_mask);
sigaction(SIGUSR1,&act,NULL);
}
int sig_handle_startrecord(int signo)
{
init_sigaction_stop();
pthread_create(&thread_id, NULL, &recordvideo, NULL);
}
void init_sigaction_start(void)
{
struct sigaction act;
act.sa_handler=sig_handle_startrecord;
act.sa_flags=0;
sigemptyset(&act.sa_mask);
sigaction(SIGUSR2,&act,NULL);
}
void recordvideo(void)
{
printf("gon");
for(;;)
{
size++;
}
//return;
}
|
在for循环里加入测试点。如sleep 或pthread_cancel_test。