几个知识点:
1.线程由两部分组成:线程的内核对象,操作系统用它来对线程实施管理,内核对象也是系统用来存放线程统计信息的地方;另一个是线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量。
2.线程在它所属的进程地址空间中执行代码,并且在进程的地址空间中对数据进行操作。
3.注意CreateThread函数是用来创建线程的Windows函数。如果你正在编写C/C++代码,绝不应该调用CreateThread。应该使用Visual C++运行期库函数_beginthreadex。
4.与3相对应的,必要的时候,使用_endthreadex。
5._beginthreadex和CreateThread的区别如下(此段摘自MSDN):_beginthreadex使你可以将多个参数传递到线程;_beginthreadex初始化某些C运行时库变量,在线程中使用C运行时库时,这一点很重要;CreateThread帮助提供对安全属性的控制,可以使用此函数启动处于挂起状态的线程。
6.终止线程的运行,有如下几种方法:
- 线程函数返回(最好使用这种方法);
- 通过调用ExitThread函数,线程将自行撤销(最好不要使用这种方法);
- 同一个进程或另一个进程中的线程调用TerminateThread函数(应该避免使用这种方法);
- 包含线程的进程终止运行(应该避免使用这种方法)。
7.ExitThread和TerminateThread的区别是:ExitThread总是撤销调用的线程,而TerminateThread可以撤销任何线程,但是TerminateThread函数是异步的,函数返回时,不能保证线程被撤销,如果需要确切地知道线程已经终止运行,必须调用WaitForSingleObject或者类似的函数,传递线程的句柄。而且,使用TerminateThread函数时,在拥有该线程的进程终止运行之前,系统不会撤销该线程的堆栈。
8.线程句柄和进程句柄,有伪句柄和实句柄之分。一般情况下,使用伪句柄就行,但是有些情况下,需要使用DuplicateHandle函数将伪句柄转换成实句柄。