多线程笔记4
2015-07-14 10:54
344 查看
第五章:不要让线程成为脱缰野马
1.干净的终止一个线程
(1)BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode)//dwExitCode:线程结束代码。
线程在结束前没有机会清理自己,且堆栈不会释放,产生内存泄露。相关的DLLs没有机会获得”线程解除附着”的通知。这是一个危险的函数,非不得已的情况不用。
(2)使用信号(Signals),行不通。
(3)跨越线程,丢出异常。win32API中没有什么标准方法可以把一个异常情况丢到另一个线程中。
(4)设立一个标记:使用一个手动重置(manual-reset)的 event 对象。Worker 线程可以检查该event 的状态或是等待它。
2.线程优先权
(1)以进程的“优先权类别(priority class)”、线程的“优先权层级 (priority level)”和操作系统当时采用的“动态提升(Dynamic Boost)”作为计算基准。拥有最高优先权之线程,即为下一个将执行起来的线程.如果优先权相同,则轮流调度。
(2)4个优先权类别 ,两个相关函数:SetPriorityClass,GetPriorityClass
HIGH_PRIORITY_CLASS 13
IDLE_PRIORITY_CLASS 4
NORMAL_PRIORITY_CLASS 7 or 8
REALTIME_PRIORITY_CLASS 24
(3)7个优先权层级
THREAD_PRIORITY_HIGHEST +2
THREAD_PRIORITY_ABOVE_NORMAL +1
THREAD_PRIORITY_NORMAL 0
THERAD_PRIORITY_BELOW_NORMAL -1
THREAD_PRIORITY_LOWEST -2
THREAD_PRIORITY_IDLE set to 1
THREAD_PRIORITY_TIME_CRITICAL set to 15
BOOL SetThreadPriority(HANDLE hThread, int nPriority);
int GetThreadPriority(HANDLE hThread);
(4)动态提升
3.初始化一个线程
(1)初始化理由:调整优先权;绑核等。
(2)CreateThread()第五个参数设为CREATE_SUSPENDED
(3)DWORD ResumeThread(HANDLE hThread)//执行一个线程
(4)DWORD SuspendThread(HANDLE hThread)//挂起一个 线程
1.干净的终止一个线程
(1)BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode)//dwExitCode:线程结束代码。
线程在结束前没有机会清理自己,且堆栈不会释放,产生内存泄露。相关的DLLs没有机会获得”线程解除附着”的通知。这是一个危险的函数,非不得已的情况不用。
(2)使用信号(Signals),行不通。
(3)跨越线程,丢出异常。win32API中没有什么标准方法可以把一个异常情况丢到另一个线程中。
(4)设立一个标记:使用一个手动重置(manual-reset)的 event 对象。Worker 线程可以检查该event 的状态或是等待它。
2.线程优先权
(1)以进程的“优先权类别(priority class)”、线程的“优先权层级 (priority level)”和操作系统当时采用的“动态提升(Dynamic Boost)”作为计算基准。拥有最高优先权之线程,即为下一个将执行起来的线程.如果优先权相同,则轮流调度。
(2)4个优先权类别 ,两个相关函数:SetPriorityClass,GetPriorityClass
HIGH_PRIORITY_CLASS 13
IDLE_PRIORITY_CLASS 4
NORMAL_PRIORITY_CLASS 7 or 8
REALTIME_PRIORITY_CLASS 24
(3)7个优先权层级
THREAD_PRIORITY_HIGHEST +2
THREAD_PRIORITY_ABOVE_NORMAL +1
THREAD_PRIORITY_NORMAL 0
THERAD_PRIORITY_BELOW_NORMAL -1
THREAD_PRIORITY_LOWEST -2
THREAD_PRIORITY_IDLE set to 1
THREAD_PRIORITY_TIME_CRITICAL set to 15
BOOL SetThreadPriority(HANDLE hThread, int nPriority);
int GetThreadPriority(HANDLE hThread);
(4)动态提升
3.初始化一个线程
(1)初始化理由:调整优先权;绑核等。
(2)CreateThread()第五个参数设为CREATE_SUSPENDED
(3)DWORD ResumeThread(HANDLE hThread)//执行一个线程
(4)DWORD SuspendThread(HANDLE hThread)//挂起一个 线程
相关文章推荐
- eclipse安装svn插件
- hdu 1384 Intervals (差分约束)
- MarkDown语法
- LLVM的简单入手步骤
- SQL基本语句
- sql:根据字段查询表名
- jQuery(function(){...})与(function($){...})(jQuery)的“兄弟”情结
- 随机森林的学习
- [LeetCode] Pascal's Triangle II
- Android 在项目中实现百度地图
- Android多线程下安全访问数据库
- 【VB】SQL多条件查询(机房问题)
- Assertion failure in -[UICGColor encodeWithCoder:]
- InputStream用法
- java学习路线分享,让你少走弯路
- Android签名功能的实现
- 技术文档博客集锦
- Tesseract 源码分析
- SQL Server执行计划的理解
- python里的del变量无法立刻释放内存的解决办法