在main()中创建线程,当main结束时整个进程,所有的线程被杀死.如果是在一个父线程中创建一个子线程,父线程结束不影响子线程运行.
问题:进程中是不是以main()为例程创建主线程?如果是,也就可以这么解释,主线程退出进程结束.
这是不是跟运行期函数有关?

解决方案 »

  1.   

    windows程序管理以进程为单位,所以一个程序的线程除了注入到别的进程的都随着主线程的结束而结束.
      

  2.   


    main()
    {
    ....
       creatthread();
    ...   return 0;
    }
    类似这么一个测试模型, 当return 0;后进程就结束了.如果不会结束,进程应该存在啊.
      

  3.   

    楼上几位说的都不完全对
    一般情况下,主线程结束进程就结束了。
    但是
    “Windows Platform SDK文档中声明,进程要等到所有线程终止运行之后才终止运行。就操作系统而言,这种说法是对的。但是, C/C++运行期对应用程序采用了不同的规则,通过调用ExitProcess,使得C/C++运行期启动代码能够确保主线程从它的进入点函数返回时,进程便终止运行,而不管进程中是否还有其他线程在运行。不过,如果在进入点函数中调用ExitThread,而不是调用E x t i P r o c e s s或者仅仅是返回,那么应用程序的主线程将停止运行,但是,如果进程中至少有一个线程还在运行,该进程将不会终止运行。”以上说明摘自《Windows核心编程》
      

  4.   


    这个"仅仅返回"指的是什么?核心编程里还说过,只要进入点函数返回,整个进程结束是因为调用了ExitPrecess().这个返回又是指什么?
      

  5.   

    当主线程的进入点函数( WinMain、wWinMain、main或wmain)返回时,它将返回给C / C + +运行期启动代码,它能正确地清除该进程使用的所有的C运行期资源。当C运行期资源被释放之后,C运行期启动代码就显式调用E x i t P r o c e s s,并将进入点函数返回的值传递给它。这解释了为什么只需要主线程的进入点函数返回,就能够终止整个进程的运行。请注意,进程中运行的任何其他线程都随着进程而一道终止运行。exitprocess由运行期启动代码调用,而不是由我们控制.也就是可以说,只要我的进入点函数返回了,那么就标志着进程的结束.
      

  6.   

    1. 是的。
    2. 是的。C-Runtime Library在主线程的main正常return后,会做一些释放资源的操作,最后调用ExitProcess来终止整个进程,因此所有子线程也就结束了。
      

  7.   


    just return
    指的是调用return来使函数返回
      

  8.   

    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就结束进程,杀掉所有线程.