线程的取消pthread_cancel()函数(线程三)

来源:互联网 发布:英语软件有哪些 编辑:程序博客网 时间:2024/05/20 14:43

一、线程取消相关函数

1pthread_cancel().线程取消函数

成功返回0,失败返回错误码。

2.pthread_setcancelstate().设置线程取消状态

成功返回0,失败返回错误码。

该函数第一个参数,有两种情况(响应和不响应取消函数),第二个参数就旧状态,一般为空。

3.pthread_setcanceltype().设置取消类型

在可取消的状态下 ,又分为立即取消和延时取消。

成功返回0,失败返回错误码。

该函数第一个参数:有两个种状态立即取消延时取消,第二个参数就旧状态,一般为空

扩展:延时取消涉及到一个取消点(cancel point),在书册中man pthreads

二:代码

#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<pthread.h>void* thread_fun(void * arg){    printf("i am new thread ...\n");//pthread_setcancelstate(state, *oldstate);    int cancel_state;    cancel_state = pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);    if(cancel_state != 0)    {        printf("pthread_setpthreadstate is failed ...\n");        return (void*)0;    }    //printf("i am new thread ...\n");    sleep(3);    printf("about to cancel.\n");//pthread_setcancelstate(state, *oldstate);    cancel_state = pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);    if(cancel_state != 0)    {        printf("pthread_setcancelstate is failed ...\n");        return (void*)0;    }//pthread_setcanceltype(state, *oldstate);    int cancel_type;    cancel_type = pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,NULL);    if (cancel_type != 0)    {        printf("pthread_t");        return (void*)0;    }//set cancelpoint: printf();    printf("i am first cancelpoint...\n");    printf("i am second cancelpoint ...\n");    return (void*)20;}int main(int argc , char ** argv){    pthread_t  tid;    int err ;    void *retval;    //creat new thread    err = pthread_create(&tid , NULL , thread_fun, NULL);    if(err != 0)    {        printf("pthread create is failed..\n");        return 0;    }    printf("i  am main thread...\n");    sleep(1);//pthread_cancel(pthread_t tid);    int cancel_val ;    cancel_val = pthread_cancel(tid);    if(cancel_val != 0)    {        printf("pthread cancel is failed ...\n");        return 0;    }// pthread_join(pthread_t tid ,void**retval);    int  join_val;    join_val = pthread_join(tid,&retval);    if(join_val != 0)    {        printf("pthread join is failed ...\n");        return 0;    }//printf(" new thread exit coid");    printf("the new thread exit code is %d\n",(int *)retval);    return 0;}


运行程序

 

0 0
原创粉丝点击