楼上几位说的都不完全对 一般情况下,主线程结束进程就结束了。 但是 “Windows Platform SDK文档中声明,进程要等到所有线程终止运行之后才终止运行。就操作系统而言,这种说法是对的。但是, C/C++运行期对应用程序采用了不同的规则,通过调用ExitProcess,使得C/C++运行期启动代码能够确保主线程从它的进入点函数返回时,进程便终止运行,而不管进程中是否还有其他线程在运行。不过,如果在进入点函数中调用ExitThread,而不是调用E x t i P r o c e s s或者仅仅是返回,那么应用程序的主线程将停止运行,但是,如果进程中至少有一个线程还在运行,该进程将不会终止运行。”以上说明摘自《Windows核心编程》
当主线程的进入点函数( WinMain、wWinMain、main或wmain)返回时,它将返回给C / C + +运行期启动代码,它能正确地清除该进程使用的所有的C运行期资源。当C运行期资源被释放之后,C运行期启动代码就显式调用E x i t P r o c e s s,并将进入点函数返回的值传递给它。这解释了为什么只需要主线程的进入点函数返回,就能够终止整个进程的运行。请注意,进程中运行的任何其他线程都随着进程而一道终止运行。exitprocess由运行期启动代码调用,而不是由我们控制.也就是可以说,只要我的进入点函数返回了,那么就标志着进程的结束.
return都是用来使函数返回的1,只需要主线程的进入点函数返回,就能够终止整个进程的运行。---也就是说,只要返回整个进程就结束,所有线程都kill.可以推出运行期启动代码在此调用了exitprocess.2,如果在进入点函数中调用E x i t T h r e a d,而不是调用E x t i P r o c e s s或者仅仅是返回,那么应用程序的主线程将停止运行,但是,如果进程中至少有一个线程还在运行,该进程将不会终止运行。-----也就是说,返回如果有一个线程还在运行,进行就不会终止.可以推出运行期启动代码在此没有调用了exitprocess.由1,2两点可以得出,1中的"返回"与2中的"仅仅返回"有区别.但区别在那? 1,2两点都是从核心编程里摘出来的原话.运行期启动代码又不能修改,所以说只要return就结束进程,杀掉所有线程.
main()
{
....
creatthread();
... return 0;
}
类似这么一个测试模型, 当return 0;后进程就结束了.如果不会结束,进程应该存在啊.
一般情况下,主线程结束进程就结束了。
但是
“Windows Platform SDK文档中声明,进程要等到所有线程终止运行之后才终止运行。就操作系统而言,这种说法是对的。但是, C/C++运行期对应用程序采用了不同的规则,通过调用ExitProcess,使得C/C++运行期启动代码能够确保主线程从它的进入点函数返回时,进程便终止运行,而不管进程中是否还有其他线程在运行。不过,如果在进入点函数中调用ExitThread,而不是调用E x t i P r o c e s s或者仅仅是返回,那么应用程序的主线程将停止运行,但是,如果进程中至少有一个线程还在运行,该进程将不会终止运行。”以上说明摘自《Windows核心编程》
这个"仅仅返回"指的是什么?核心编程里还说过,只要进入点函数返回,整个进程结束是因为调用了ExitPrecess().这个返回又是指什么?
2. 是的。C-Runtime Library在主线程的main正常return后,会做一些释放资源的操作,最后调用ExitProcess来终止整个进程,因此所有子线程也就结束了。
just return
指的是调用return来使函数返回
1,2两点都是从核心编程里摘出来的原话.运行期启动代码又不能修改,所以说只要return就结束进程,杀掉所有线程.