主线程退出时,会首先去结束其他线程吗?

论坛地址:http://bbs.csdn.net/topics/370193909

windows核心编程中有讲的,第69页:
“Windows Platform SDK文档声明,进程要等到所有线程终止运行之后才终止运行。就操作
系统而言,这种说法是对的。但是, C / C + +运行期对应用程序采用了不同的规则,通过调用
E x i t P r o c e s s,使得C / C + +运行期启动代码能够确保主线程从它的进入点函数返回时,进程便终止运行,而不管进程中是否还有其他线程在运行。不过,如果在进入点函数中调用E x i t T h r e a d,而不是调用E x t i P r o c e s s或者仅仅是返回,那么应用程序的主线程将停止运行,但是,如果进程中至少有一个线程还在运行,该进程将不会终止运行。”

 

#include <process.h> /* _beginthread, _endthread */
#include <windows.h>
#include <STDIO.H>

unsigned __stdcall _threadfun(void* pParam)
{
while(TRUE)
{
printf("xxx\n");
}
}


void main()
{
unsigned uThreaID;
_beginthreadex(NULL,0,_threadfun,NULL,NULL,&uThreaID);
//不调用ExitThread,主线程执行完成退出,crt会终止所有的线程,进程就得以退出
//如果调用了ExitThread退出主线程,crt不会终止其他的线程,虽然主线程退出了,进程仍然在
//ExitThread(1);
}

 

posted @ 2014-08-06 00:43  何人之名  阅读(710)  评论(0)    收藏  举报