进程与线程有那些区别和联系详解
学习各种高级外挂制作技术,马上去百度搜索"魔鬼作坊",点击第一个站进入,快速成为做挂达人
LpThreadId用来存放系统分配给新线程的ID
如何终止线程的运行
(1)线程函数返回(最好使用这种方法)
这是确保所有线程资源被正确地清除的唯一办法
如果线程能够返回,就可以确保下列事项的实现:在线程函数中创建的所有C++对象均将通过它们的撤消函数正确地撤消
操作系统将正确地释放线程堆栈使用的内存
系统将线程的退出代码设置为线程函数的返回值
系统将递减线程内核对象的使用计数
(2)调用ExitThread函数(最好不要使用这种方法)
该函数将终止线程的运行,并导致操作系统清除该线程使用的所有操作系统资源
但是,C++资源(如 C++类对象)将不被撤消
(3) 调用TerminateThread函数(应该避免使用这种方法)
TerminateThread能撤消任何线程
线程的内核对象的使用计数也被递减
TerminateThread函数是异步运行的函数
如果要确切地知道该线程已经终止运行,必须调用WaitForSingleObject或者类似的函数
当使用返回或调用ExitThread的方法撤消线程时,该线程的内存堆栈也被撤消
但是,如果使用TerminateThread,那么在拥有线程的进程终止运行之前,系统不撤消该线程的堆栈
(4) 包含线程的进程终止运行(应该避免使用这种方法)
由于整个进程已经被关闭,进程使用的所有资源肯定已被清除
就像从每个剩余的线程调用TerminateThread一样
这意味着正确的应用程序清除没有发生,即 C++对象撤消函数没有被调用,数据没有转至磁盘等等
一旦线程不再运行,系统中就没有别的线程能够处理该线程的句柄
然而别的线程可以调 GetExitcodeThread来检查由 hThread标识的线程是否已经终止