主线程的退出问题

摘录自: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或者仅仅是返回,那么应用程序的主线程将停止运行,但是,如果进程中至少有一个线程还在运行,该进程将不会终止运行。”

我同意12楼的说法。可以写一个测试代码
C/C++ code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <process.h>    /* _beginthread, _endthread */
#include <windows.h>
unsigned  __stdcall _threadfun( void * pParam)
{
     while (TRUE)
     {
         Sleep(10);
     }
}
 
 
void  main()
{
   unsigned uThreaID;
    _beginthreadex(NULL,0,_threadfun,NULL,NULL,&uThreaID);
    //不调用ExitThread,主线程执行完成退出,crt会终止所有的线程,进程就得以退出
    //如果调用了ExitThread退出主线程,crt不会终止其他的线程,虽然主线程退出了,进程仍然在
    //ExitThread(1);
}

你可能感兴趣的:(主线程的退出问题)