子线程如何不阻塞主线程

无限生机 2012-07-02 06:53:44
我写了个子函数,子函数目的是创建一个新线程pthread_create()(或者win32的Createthread());然后转去执行a任务;为了让a任务能够准确结束,子函数又添加了pthread_join()(或者win32的WaitForSingleObject());可是当主函数main()调用该子函数时主函数剩下的执行语句就会被阻塞了,直到该子函数任务结束退出才可继续执行。可我想主函数不被阻塞,怎么办呢? 还有什么更好的办法么 ?(linux下面和win32的解答都能说下最好了)
...全文
698 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
左眼看到鬼 2012-07-02
  • 打赏
  • 举报
回复
子函数又添加了pthread_join()
这个就会让子函数阻塞等待了,如果想不阻塞等待的话就不能用这个函数了,可以在子函数创建线程时,设置成分离(detach)状态, pthread_detach(thread_id),让线程自己管理自己的后事,自动释放资源等。
或者创建的线程里面  pthread_detach(pthread_self())
  • 打赏
  • 举报
回复
用消息机制
jzxsasch 2012-07-02
  • 打赏
  • 举报
回复
windows中在主线程退出前必须要用WaitForSingleObject(),不然子线程也会跟着退出
cxdzxc 2012-07-02
  • 打赏
  • 举报
回复
给你借鉴下:
#include <stdio.h> 
#include <Windows.h>
#include <time.h>
#include <process.h>

volatile LONG g_bCon;

void printThread(void* pArg)
{
int i = 0; while(g_bCon)
{
printf("%d\n",i++);
}
}

void countThread(void* pArg)
{
_beginthread(printThread,0,0);
Sleep(1000);
g_bCon = 0;
}

int main(int argc, char* argv[])
{
g_bCon = 1;
_beginthread(countThread,0,0);
system("pause"); /*这里必须要暂停下*/
return 0;
}
qq120848369 2012-07-02
  • 打赏
  • 举报
回复
detach或者轮询检测标记后join。
tongzhipeng5699 2012-07-02
  • 打赏
  • 举报
回复
子函数中使用了pthread_join()就自然阻塞了,你要想不阻塞,只有把pthread_join放到函数外面去了。
小菜愚见,仅供参考。
孤独小剑 2012-07-02
  • 打赏
  • 举报
回复
如果主线程不需要等待你那个子函数里调用的子线程全部结束,那个子函数里的线程可以以分离状态运行,线程调用pthread_detach(pthread_self())或者
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&tid, &attr, routine, NULL);

或者设置一个子线程完成任务的标志,主线程定期检查亦可。

69,371

社区成员

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

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