一旦进程的主线程结束这个进程就结束了吗?

unitten 2013-05-06 06:50:00
看到什么前台线程和后台线程的东西,说是如果这个进程下的线程都是前台线程的话,程序就要所有已启动的线程都运行完毕才会结束。
...全文
910 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
http://blog.csdn.net/my3439955/article/details/8909641
liangbina07 2013-05-06
  • 打赏
  • 举报
回复
主线程 就像树的根节点一样,当根都不在了,毛将附焉。至于资源释放问题,unix和windows下不同。
hust_wangyajun 2013-05-06
  • 打赏
  • 举报
回复
主线程创建了辅助线程, 就要有两种行为 1 亲自结束辅助线程的生命(CloseHandle),2 等待辅助线程自己结束。否则如果主线程意外终止,会导致辅助线程的资源泄露。为了防止这种情况,也可以在辅助线程中采用GetExitCodeThread时时检测主线程(或者这样说不确切,也可以是创建者线程)是否还健在,从而自行结束生命。代码: DWORD WINAPI ThreadProc2(LPVOID lpParam) { //辅助线程 HANDLE hParent=(HANDLE)lpParam; DWORD nCode; do { if (!GetExitCodeThread (hParent,&nCode)) { printf ("get exit code failed!\n"); printf ("error:%d\n",GetLastError ()); } if (nCode!=STILL_ACTIVE)//父线程结束 { cout<<"Thread2 find his father had exit,so it exit itself"<<endl; return 1; } } while (TRUE); } DWORD WINAPI ThreadProc1(LPVOID lpParam) { //创建者线程,给辅助线程传递自己的句柄,该句柄必须通过DuplicateHandle得到 HANDLE hParent=INVALID_HANDLE_VALUE; if (!DuplicateHandle (GetCurrentProcess (),GetCurrentThread (),GetCurrentProcess (),&hParent,NULL,TRUE,DUPLICATE_SAME_ACCESS)) printf ("get parent handle failed!\n"); HANDLE hThread = CreateThread (NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc2,(LPVOID)hParent,0,NULL); if(hThread == 0) { DWORD error = GetLastError(); cout<<"Create thread2 failed,error number:"<<error<<endl; system("pause"); return -1 ; } Sleep(4000); CloseHandle(hThread); return 0; }
tiankong_bear 2013-05-06
  • 打赏
  • 举报
回复
主线程退出,进程退出。 “前台线程”的那个说法没什么道理
  • 打赏
  • 举报
回复
理论上主线程结束进程就退出了,自动释放为这个进程分配的所有资源。 但是我们写程序一般都会自己结束其它线程释放资源,不然可能会出现未知的错误。
ljz888666555 2013-05-06
  • 打赏
  • 举报
回复
主进程结束,程序就退出了。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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