关于ExitProcess的一点诱惑,求讲解!
在学习windows编程的过程中,在书上看见了有关ExitProcess的一点评价:“当然,可以在程序的任何地方调用此函数,用来强制当前的程序的执行立即结束。对于操作系统来说,这样做是很正常的,但是C/C++应用程序应该避免直接调用这个函数,因为这个会使C/C++运行库得不到通知,没有机会去调用全局的或者静态的C++对象的析构函数”
我的问题是:
① 为什么说这个样子对于操作系统来说是很正常的?
② C/c++运行库得不到通知什么意思
③ 既然程序的执行已经结束了,还调用C++对象的析构函数干嘛?
[解决办法]
操作系统结束一个进程的方法就是用ExitProcess。C/C++程序的运行是在运行库(CRT)的控制下进行的,包括进入程序的Main函数,以及main函数结束之后的清理工作。CRT会在进入main函数前调用程序中的静态变量和全局变量的构造函数,以及在main函数结束后调用静态变量和全局变量的析构函数。当资源清理完毕之后,CRT会调用ExitProcess来退出进程,这个函数应该是由系统来调用的,最好不要在自己的程序中调用,因为调用它之后,进程强行终止运行,CRT没有机会进行清除.
系统需要保证进程执行完毕之后,所有分配的资源都能够清除,“消除所有痕迹,就像进程没有执行过一样”。可以参考这里的CRT main执行流程。http://www.cnblogs.com/lgxqf/archive/2009/01/04/1368549.html
[解决办法]
看我转的一篇文章
http://blog.csdn.net/qq752923276/archive/2010/12/21/6089440.aspx