怎样做到主线程结束后子线程继续工作呢

power0811 2006-12-28 04:59:59
如题.请写出一个小例子.多谢指教~~~~~
...全文
1356 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzx1983 2006-12-29
  • 打赏
  • 举报
回复
楼上想说明什么?^_^
sl19820216 2006-12-29
  • 打赏
  • 举报
回复
这个方法主进程没有退出 主的是进程

int main(void)
{
pthread_t mythread;
int i;

if(pthread_create(&mythread,NULL,thread_function,NULL))
{
printf("err creating thread");
}

printf("\n主线程退出 - 1\n");
pthread_exit(NULL);
printf("\n主线程退出 - 2\n");

return 0;
}

/export/home3/ismg/shaol/test/src>:a.out

主线程退出 - 1

子线程&0

子线程&1

子线程&2

子线程&3

子线程&4
yzx1983 2006-12-29
  • 打赏
  • 举报
回复
楼主你把我弄糊涂了哎~~
主线程pthread_exit之后就没了,子线程还在啊,有虾米问题?
power0811 2006-12-29
  • 打赏
  • 举报
回复
哦....算了.呵呵.估计没有办法了....那就这样吧.谢谢大家:)
jcqstc 2006-12-29
  • 打赏
  • 举报
回复
楼主的子线程是主线程创建出来的吗?
如果是的话,没有办法.
yzx1983 2006-12-29
  • 打赏
  • 举报
回复
没看明白,现在啥情况?跟你初衷有矛盾么?
power0811 2006-12-29
  • 打赏
  • 举报
回复
可是这个并不符合我的初衷.我希望的是主线程输出主线程退出.然后结束.子线程自己运行它自己的.
有什么更好的办法么?请指教一下.:)
sl19820216 2006-12-29
  • 打赏
  • 举报
回复
主的应该是进程吧? 能够用线程的退出方法退出么?
yzx1983 2006-12-29
  • 打赏
  • 举报
回复
你把这个东西当成线程专用的exit来理解就行了。
yzx1983 2006-12-29
  • 打赏
  • 举报
回复
那当然了,你在printf之前用了pthread_exit,线程都退出了,哪还能printf 啊?
power0811 2006-12-29
  • 打赏
  • 举报
回复
......
呵呵...
好像也不太对.我把pthread_exit写到printf("\n主线程退出\n"); 是先输出:主线程退出,然后20边子线程退出.但是如果写到printf("\n主线程退出\n"); 前面的话.就看不到printf("\n主线程退出\n"); 输出了.
yzx1983 2006-12-29
  • 打赏
  • 举报
回复
……
是让你主线程用pthread_exit来退出。
power0811 2006-12-29
  • 打赏
  • 举报
回复
我刚刚试了一下.还是不行哦..
是这么写么?
void *thread_function(void *arg)
{
int i=0;
for(i=0;i<20;i++)
{
printf("子线程&");
sleep(1);
}
pthread_exit(NULL);
}
int main(void)
{
pthread_t mythread;
int i;
if(pthread_create(&mythread,NULL,thread_function,NULL))
{
printf("err creating thread");
abort();
}
printf("\n主线程退出\n");
//exit(0);
return 0;
}
yzx1983 2006-12-29
  • 打赏
  • 举报
回复
不是说了pthread_exit来退出么
power0811 2006-12-29
  • 打赏
  • 举报
回复
真的没有办法让主线程退出后子线程继续存活的可能性么??
yzx1983 2006-12-29
  • 打赏
  • 举报
回复
一会儿被插了n楼嘛……
yzx1983 2006-12-29
  • 打赏
  • 举报
回复
sorry弄错了。

任意线程使用
pthread_exit退出,都可以在不终止整个进程的情况下停止自己的“控制流”(control flow?)
包括主线程。

主线程exit会导致整个进程终止想必不用解释,而它return后也将返回到main被调用的地方,随后必然会调用exit,所以我之前说的方法不行。

匪徒说的detach方法,我没有查到相关资料说有此用途,试验了一下,也失败了。APUE上说的是detach的线程不可被join,其退出后的资源交给系统来回收。
power0811 2006-12-29
  • 打赏
  • 举报
回复
好是不行哦.....
真的没有办法让主线程退出后子线程继续存活的可能性么??
zhousqy 2006-12-29
  • 打赏
  • 举报
回复
用fork算了
zhousqy 2006-12-29
  • 打赏
  • 举报
回复
应该把名字改成pthread_unjoinable
加载更多回复(14)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧