windows核心编程-线程挂起和Context

本文介绍了Windows核心编程中的线程挂起与恢复操作,包括SuspendThread和ResumeThread函数的使用,强调了线程暂停计数的重要性。同时,讨论了线程的暂停式创建,推荐在创建线程时使用CREATE_SUSPENDED标志,以便更好地控制线程执行。此外,还阐述了如何获取和设置线程的CONTEXT环境,即寄存器状态,这在调试和异常处理中非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、线程挂起(暂停)

1、SuspendThread用来暂停一个线程的执行,线程暂停时,不会被调度执行

2、ResumeThread用来恢复一个暂停线程的执行(一个暂停的线程无法调用这个方法来恢复自己,

3、因为暂停的线程不可能被执行)暂停县城总是立即被暂停,而不管被暂停的线程执行到了哪个指令

线程内核对象内部,存储了一个暂停计数的值,每调用一次,SuspendThread方法该值就加1,

调用ResumeThread一次该值就减1当该值为0时,就表示该线程可以被调用执行了,但不会被立即执行,

所以多次被Suspend的线程不能期望调用一次Resume方法就恢复

4、这两个方法入口参数为线程的句柄

5、线程函数内部可以通过Sleep或者SleepEx方法自行暂停一定时间后自动恢复执行,但是这个暂停时间

对于系统调度程序来说只是一个参考值,调度程序不能保证精确的暂停指定的时长,通常暂停时长会长于

指定的暂停时长

二、线程的暂停式创建(下面例子1)

1、在调用CreateThread创建线程时,可以明确指定以暂停方式创建线程(CREATE_SUSPENDED)

2、如果没有暂停方式执行的话,创建线程的行为将比较难以控制,有可能调度程序在CreateThread返回

前就开始执行新线程,也有可能在返回之后才去调度执行新线程,很难预期

3、所以,推荐创建线程都以暂停标志创建知道CreateThread返回,并做了一些必要的处理后&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值