- 论坛徽章:
- 0
|
卖萌犯法 发表于 2013-07-01 09:17 ![]()
回复 5# ejeker
pthread_attr_t attr;
谢谢,按照你说的,做了修改。新的代码如下:
- #include <stdio.h>
- #include <stdlib.h>
- #include <pthread.h>
- #include <errno.h>
- #include <unistd.h>
- using namespace std;
- void exe_exit1(void *arg)
- {
- printf("%s:arg=%s\n",__FUNCTION__,(char *)arg);}
- void exe_exit2(void *arg)
- {
- printf("%s:arg=%s\n",__FUNCTION__,(char *)arg);
- }
- void *func(void*)
- {
- printf("thread start\n");
- pthread_cleanup_push(exe_exit2,static_cast<void*>(const_cast<char*>("For exe_exit1")));
- pthread_cleanup_push(exe_exit1,static_cast<void*>(const_cast<char*>("For exe_exit2")));
- printf("pthread_cleanup_push ok\n");
- printf("pthread_cleanup_pop begin\n");
- pthread_cleanup_pop(1);
- pthread_cleanup_pop(1);
- return NULL;
- }
- int main()
- {
- pthread_t tid;
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
- pthread_create(&tid,&attr,func,NULL);
- pthread_attr_destroy(&attr);
- sleep(1);
- exit(0);
- }
复制代码 运行结果如我所预期的那样。 |
|