pthread_create()
と関数を使用してマルチスレッドプログラムを作成していますが、本来のスレッドが実際には終了していないpthread_cancel()
ことに気付きました。pthread_cancel()
void check(void *param){
header_t *Bag = (header_t *) param;
pthread_t timer_thread;
while(true){
if(Bag->size && TIMER_OFF){
pthread_create(&timer_thread, NULL, (void *) &timer, (void *) Bag);
printf("\nCREATE THREAD ID = %d\n", timer_thread);
// ADD
}
else if(!TIMER_OFF && Bag->size >= 2 && Bag->next->time <= CURRENT_APT_TIME && CRRENT_TAG != Bag->next->tag){
printf("\nOLD THREAD ID = %d TO BE CANCELLED\n", timer_thread);
pthread_cancel(timer_thread);
pthread_create(&timer_thread, NULL, (void *) &timer, (void *) Bag);
printf("\nNEW THREAD ID = %d\n", timer_thread);
// Replace
}
Sleep(1);
}
}
タイマー関数void timer(void *)
はまさにそのように聞こえます、そして私はそれ自体のスレッドIDを出力するために数行を含めました。
テストしたところ、次のことがわかりました。
...
OLD THREAD ID = 6041240 TO BE CANCELLED
NEW THREAD ID = 6046456
...
THREAD ID EXECUTING = 6041240
pthread_cancel()
したがって、タイマー関数は?を呼び出すことによって終了しませんでした。