Windows核心编程学习笔记(11)--线程调度
来源:互联网 发布:centos如何修改ip地址 编辑:程序博客网 时间:2024/05/12 22:26
Drecik学习经验分享
转载请注明出处:http://blog.csdn.net/drecik__/article/details/8091304
- 线程的挂起与恢复
在线程对象中有一个值表示线程的挂起计数,在调用CreateProcess或CreateThread时,系统将创建线程的内核对象,并把挂起计数初始化为1,因为线程初始化需要时间,这样可以防止线程在初始化的时候被执行。
在线程初始化之后,CreateProcess或CreateThread函数会查看是否传递CREATE_SUSPENDED标志,如果没有则将挂起计数递减为0,让线程可以执行,否则让线程继续保持挂起。
线程可以执行ResumeThread函数来递减挂起计数或者使用SuspendThread函数来递增挂起计数,但是挂起计数不能超过MAXINMUN_SUSPEND_COUNT(127)个,这两个函数原型如下,函数返回值都是调用函数之前的挂起计数:
DWORD ResumeThread(HANDLE hThread// 线程句柄,注意线程本身不能唤醒自己;);// 使用该函数挂起另一个线程时需要注意不知道该线程在做什么;// 例如,当该线程正在分配堆中内存,锁定完堆之后,被挂起,将不能让;// 其他线程使用堆,可能出现死锁;DWORD SuspendThread(HANDLE hThread// 线程句柄,线程本身可以挂起自己;);
- 进程的挂起与恢复
Windows中不存在挂起进程的概念,但是可以枚举进程中所有线程来使进程中线程全部挂起或恢复
- 线程睡眠
使用Sleep函数可以休眠自己,传入的参数是休眠的时间,Sleep函数有以下注意:
- 调用Sleep函数,将使线程资源放弃属于它的时间片中剩下部分
- 传入的时间只是近似值,因为Windows不是实时操作系统,取决于其他线程运行情况
- 当传入INFINITE,将使该线程永远不会调度,但这样做没意义,没有是线程直接退出好
- 传入0,表示该线程自愿放弃时间片,将CPU留给其他线程,当有相同或者较高优先级的线程则会调用那个线程,否则继续调用该线程
- 切换到另一个线程
使用SwitchToThread可以是该线程放弃时间片,调度其他线程,与Sleep传入0函数不同的是,该函数可以调度优先级比它小的线程
- Windows核心编程学习笔记(11)--线程调度
- Windows核心编程:线程调度
- Windows核心编程笔记(5)----线程调度,优先级
- Windows核心编程笔记(七) 线程调度 优先级 关联性
- 【WIndows核心编程学习笔记】线程栈
- 线程学习笔记(windows核心编程)
- Windows核心编程学习笔记 第二部分 完成编程任务 第7章 线程的调度 优先级 亲缘性
- windows核心编程第七章--线程调度
- WINDOWS核心编程学习心得--线程调度
- Windows核心编程--线程调度/优先级/关联性
- Windows核心编程学习笔记(22)--Windows线程池
- windows核心编程_线程_学习笔记
- Windows核心编程学习笔记(13)--浅谈线程上下文
- Windows核心编程学习笔记(16)--线程同步
- Windows核心编程学习笔记--进程和线程的优先级
- 3.Windows核心编程-线程及线程调度
- windows核心编程学习笔记
- windows核心编程学习笔记
- 公安问卷系统
- jbpm5学习资料(资源库Drools Guvnor)
- hdu 1864 最大报销额
- 违心的伤感空间日志_心情好乱纠结着彻底崩溃掉
- jbpm5学习资料(设计器Designer)
- Windows核心编程学习笔记(11)--线程调度
- FLEX 中 忙碌光标
- 2012上半年美国最受天使青睐6大行业揭晓
- 11级_Java_曹建波 10.19 Servlet2
- linux 自动登录单板脚本
- 1019学习记录
- 我是傻,总是一而再三的去相信。
- 从决策树学习谈到贝叶斯分类算法、EM、HMM
- jbpm5学习资料(组件Components)