摘录自: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楼的说法。可以写一个测试代码
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);
}
|