第6课:终止线程

关闭内核对象  closehandler 如果不关闭句柄的话,可能造成资源泄露

挂起线程:SuspendThread  可以挂起127次线程

挂起线程N次就需要恢复线程N次,但是不会大于127次


终止线程:

ExitThread 该函数将终止线程的执行,并导致操作系统清除该线程使用的所有操作系统资源

.版本 2

.DLL命令 ExitThread, 整数型, "kernel32.dll", "ExitThread", , 终止当前线程
    .参数 dwExitCode, 整数型,  , 线程的退出码,可以使用 GetExitCodeThread 函数获取此退出码。

TerminateThread 与TexitThread不同,ExitThread总是撤销调用的线程,而TerminateThread能够撤销任何线程。如果使用TerminateThread,那么在拥有线程的进程终止运行之前,系统不撤销该线程的堆栈,microsoft故意用这种方法来实现TerminateThread,如果其他仍然正在执行的线程要引用强制撤销的线程堆栈上的值,那么其他的i安城就会出现访问违规的问题

.版本 2

.DLL命令 TerminateThread, 整数型, "kernel32.dll", "TerminateThread", , 终止当前线程
    .参数 hThread, 整数型,  , 指定要终止线程的句柄
    .参数 dwExitCode, 整数型,  , 将用做被终止线程的退出码


推荐使用:推荐使用线程函数返回

.版本 2

.DLL命令 GetExitCodeThread, 整数型, "kernel32.dll", "GetExitCodeThread", , 获取一个已中止线程的退出代码
    .参数 hThread, 整数型,  , 想获取退出代码的一个线程的句柄.版本 2
    .参数 lpExitCode, 整数型,  , 用于装载线程退出代码的一个长整数变量。如线程尚未中断,则设为常数STILL_ACTIVE


退出码的作用是,检查线程是正常退出还是强制结束


切换线程,操作系统转到下一个线程运行

.版本 2

.DLL命令 SwitchToThread, 逻辑型, "kernel32", "SwitchToThread", ,


猜你喜欢

转载自blog.csdn.net/qq_28710983/article/details/80146043