在Windows下最重要的两个概念,一个是进程,一个是线程。
先来说下进程和线程的关系,进程是静态的,它相当于一个存放数据的空间,是放在内存中的,可以理解为一个工厂。而线程是动态来执行线程中的代码的,相当于工厂中的工人。看到执行代码你可能就会想到CPU了,没错,线程就是存在于CPU上的。
每个进程必须要包含一个线程。这句话怎么理解了,工厂中没工人干活,那么工厂不就等于于一个废物?它有存在的意义吗。。~!!!没有。。。。 所以每个进程必须有一个主线程,而且最少会有一个线程。线程和进程是相对独立的,但是又是互相依赖的。没有工人的工厂没有意义,没有工厂的工人也干不了活。就是这么理解的。
在来说下主线程是什么,没错 !!~~~就是我们的main函数,其实main函数就是我们的主线程的入口。程序运行的时候,系统会将我们的代码加载到内存当中,进入主线程,运行代码,程序就呼啦呼啦跑起来了。
主线程,父线程,子线程的关系。
这里必须先说明一点,主线程和父线程。
主线程:可以认为,主线程是程序的一条主线,一旦主线程结束,程序就结束了。其他所有线程都GAME OVER了。简单理解,主线程就是游戏中的主线任务,主线任务做完了,程序就通关,结束了。
父进程:一个进程中可以有很多的线程,CreateTread()函数中就有一个参数可以指定创建线程的入口,简单的说,就是可以自定义一个线程启动入口,这个时候可以新创建一个线程,而在这个线程中可以在此掉用CreateTread()函数来创建别的线程。这样的话,线程之间就可以层层嵌套,就和C++中的父类子类一回事,如果还无法理解,回家看C++继承。。。。~!!!
但是这里要说明一点,主线程好像不能成为任何线程的父线程,这个下面会说明的。。。。。
子线程:父线程的儿子。~!!!!!!!!、
当父线程消亡的时候,子线程是不会消亡的,是会继续执行到结束的。。。。。。。~!!!!!这个很重要。。。。。 因为线程只有在windows系统的R3层上看来是有嵌套父子关系的,而在内核当中,他们都是独立的内核对象。。。。。。 重点,都是独立的。所以,当父线程消亡的时候,子线程其实是可以继续执行的。
但是~!!当主线程消亡的时候,所有线程都得死。。。。都得死。。都得死~~!!!!!重要的事情说三遍。所以我觉得,主线程是不能看作任何线程的父线程的,这里就不满足父子线程的特性啊。。。。 就是这么个意思吧。。。。