zoukankan      html  css  js  c++  java
  • 线程pthread_cleanup_push的简单例程.

    #include<stdlib.h>
    #include<stdio.h>
    #include<unistd.h>
    #include<pthread.h>
    void clean_fun1(void * arg)
    {
    	printf("this is clean fun1\n");
    }
    void clean_fun2(void * arg)
    {
    	printf("this is clean fun2\n");
    }
    void * thread_fun(void * arg)
    {
    	pthread_cleanup_push(clean_fun1,NULL);
    	pthread_cleanup_push(clean_fun2,NULL);
    	sleep(100);
    	//这里要注意,如果将sleep(100);换成while(1);的话,程序会一直暂停.push和pop要成对出现.
    	//因为while(1);运行的太快,线程不接受cancel信号
    	//while(1);
    	pthread_cleanup_pop(0);
    	pthread_cleanup_pop(0);
    	return NULL;
    }
    int main()
    {
    	pthread_t tid1;
    	int err;
    	err=pthread_create(&tid1,NULL,thread_fun,NULL);
    	if(err!=0)
    	{
    		perror("pthread_create");
    		exit(0);
    	}
    	sleep(3);
    	//printf("test\n");
    	err=pthread_cancel(tid1);
    	if(err!=0)
    	{
    		perror("cancel error:");
    		exit(0);
    	}
    	err=pthread_join(tid1,NULL);
    	if(err!=0)
    	{
    		perror("pthread_join  error:");
    		exit(0);
    	}
    	
    	return 0;
    }
    

  • 相关阅读:
    iOS推送通知
    KVO内部实现原理
    沙盒目录结构
    UITableView的常用属性和代理方法
    优秀文章的链接
    c++面试题
    递归练习
    c#连接mysql环境配置
    mysql命令详解
    十进制转二进制
  • 原文地址:https://www.cnblogs.com/hnrainll/p/2022149.html
Copyright © 2011-2022 走看看