#include <stdio.h>
#include "../common.h"
pthread_once_t once = PTHREAD_ONCE_INIT;
void cleanup(void *argv)
{
char *abc = (char*)argv;
delete abc;
cout<<"-------------hhh----------"<<endl;
}
void fun_run()
{
char *abc = new char[1000*1000*100*2]();
int i = 0;
pthread_cleanup_push(cleanup,abc); //push与pop组成函数对,在此期间退出都会调用指定的(这里是cleanup)函数去清理
while(1)
{
printf("I am fun (i = %d)\n",i++);
sleep(1);
}
pthread_cleanup_pop(0);
}
void *fun(void *)
{
printf("*******************\n");
pthread_once(&once,fun_run);//设置函数只能被执行一次,但是fun会被执行多次
printf("$$$$$$$$$$$$$$$$$4$$\n");
}
int main()
{
pthread_t pthid = 0;
pthread_attr_t attr;
pthread_create(&pthid,NULL,fun,NULL);
int i;
while(1)
{
printf("I am main...input a num...\n");
scanf("%d",&i);
getchar();
if(i == 0)
{
pthread_cancel(pthid);
pthid = 0;
//pthread_join(pthid,NULL); //设置为分离的线程是不能调用pthread_join的,调用后可能会出错
//pthread_attr_destroy (&attr);
}
else if(i == 1)//测试是否会一直创建
{
//if(pthid > 0)pthread_cancel(pthid);
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);//设置分离属性
pthread_create(&pthid,&attr,fun,NULL);
}
else
{
printf("input not 1 && 0\n");
}
}
}