int pthread_setcancelstate(int state, int *oldstate);
  • 作用:設置可取消的狀態
  • PTHREAD_CANCEL_ENABLE: 線程取消請求將被傳遞。(預設值)
  • PTHREAD_CANCEL_DISABLE: 代表針對目標線程的取消請求將處於未决狀態(未決代表為不處理,但請求依然存在)。除非線程修改自己的狀態,否則不會被取消。
int pthread_setcanceltype(int state, int *oldstate);
  • 作用:設定線程接收到CANCEL信號的執行時間
  • PTHREAD_CANCEL_DEFFERED: 表示線程接收到CANCEL信號會執行到下一個取消點退出。(預設值)
  • PTHREAD_CANCEL_ASYCHRONOUS: 表示線程接收到CANCEL信號立即終止。
#include <stdio.h> #include <unistd.h> #include <pthread.h> long long int count=0; void *func(void *param) { // pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); printf("thread begin...\n"); while (1) count++; printf("thread end...\n"); } int main(int argc, char *argv[]) { int i; pthread_t thrid; // start thread if (pthread_create(&thrid, NULL, func, NULL)) { printf("pthread_create error\n"); return -1; } // sleep for (i=0; i<5; i++) { sleep(1); printf("count=%lld\n", count); } // pthread cancel test if (!pthread_cancel(thrid)) printf( "pthread_cancel OK\n" ); for (i=0; i<5; i++) { sleep(1); printf("count=%lld\n", count); } return 0; } 執行結果 # ./a.out thread begin... count=25852274 count=54434882 count=85712448 count=116924962 count=139751253 pthread_cancel OK count=139751253 count=139751253 count=139751253 count=139751253 count=139751253
創作者介紹

邱小新の工作筆記

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()