타이머를 시작하고 간격을 5 초로 설정하고 신호 처리기를 등록했습니다. 시그널 핸들러 내에서 스레드를 종료하려고 시도하는 SIGALRM이 발생하면이를 수행 할 수 없습니다. 스레드가 종료되지 않고 대신 전체 프로세스가 종료됩니다.신호 처리기 내에서 스레드 취소 중
void signalHandler()
{
printf("Caught signal ...\n");
printf("Now going to terminate thread..\n");
pthread_kill(tid, SIGKILL);
}
void * thread_function()
{
int oldstate;
char result[256] = {0};
time_t startTime = time(NULL);
time_t timerDuration = 5;
time_t endTime = startTime + timerDuration;
while(1) {
printf("Timer is runnuing as dameon..\n");
if(!strcmp(result, "CONNECTED")) {
resp = 1;
pthread_exit(&resp);
}
}
}
int main()
{
int *ptr[2];
signal(SIGALRM, signalHandler);
timer.it_interval.tv_usec = 0;
timer.it_interval. tv_usec = 0;
timer.it_value.tv_sec = INTERVAL;
timer.it_value.tv_usec = 0;
setitimer(ITIMER_REAL, &timer, 0);
pthread_create(&tid, NULL, thread_function, NULL);
pthread_join(tid, (void**)&(ptr[0]));
printf("test %d\n\n",*ptr[0]);
while(1)
printf("1");
}
플랫폼 :
다음은 코드 리눅스, GCC 컴파일러