《Win32多线程程序设计》(11)---ResumeThread()SuspendThread()
初始化一个线程
HANDLE hThread;
DWORD threadId;
hThread = CreateThread(NULL,
0,
ThreadFunc,
0,
CREATE_SUSPENDED,
&threadId);
SetThreadPriority(hThread, THREAD_PRIORITY_IDLE);
一旦线程设定妥当,你可以调用Resum eThread() 开始执行:
DWORD ResumeThread(
HANDLE hThread
);
参数
hThread 欲被再次执行的线程。
返回值
如果函数成功,则传回线程的前一个挂起次数。如果失败,则传回0xFFFFFFFF。GetLastError() 可以获得更详细的信息。
挂起(suspending)一个线程
这个函数允许调用端指定一个线程睡眠(挂起)。直到又有人调用了Resum eThread(),线程才会醒来。因此,睡眠中的线程不可能唤醒自己。
DWORD SuspendThread(
HANDLE hThread
);
参数
hThread 欲被挂起的线程。
返回值
如果函数成功,则传回线程目前的挂起次数。如果失败,则传回0xFFFFFFFF。GetLastError() 可以获得更详细的信息。
SuspendThread() 是另一个可能会潜在引发问题的函数。考虑一下这种情况:一个进程拥有三个线程A,B,C。线程C正在某个critical section 内,而线程B正在等它出来。然后,线程A挂起了线程C。在这种情况下,线程C将永远不会离开critical section,而线程B也就相当于进入了死锁状态。
SuspendThread() 的最大用途就是用来协助撰写调试器。调试器允许在程序员的控制之下,启动或停止任何一个线程。
文字版电子书-----请点击这里
《Win32多线程程序设计》(11)---ResumeThread()SuspendThread()相关推荐
- 深入浅出Win32多线程程序设计
引言 从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的成员员也只能通过驻留内存的方式实现所谓的"多任务",而如今的Win32操 ...
- 《win32多线程程序设计》学习笔记
写于2016年6月24日 " vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2 "第一章 为什么千头万绪 {{{ ...
- 深入浅出Win32多线程程序设计之线程通信
简介 线程之间通信的两个基本问题是互斥和同步. 线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒. 线程互斥是 ...
- Win32多线程程序设计学习(第五章)
目录 不要让线程成为脱缰野马 1,干净地终止一个线程 "TerminateThread() 是一个危险的函数,应该在最不得已的情况下才使用" 2,线程优先权(Thread Prio ...
- win32多线程程序设计笔记(第四章上)
前面已经介绍了线程的创建.销毁过程,如何判断一个线程是否结束:但是撰写多线程程序的一个挑战性问题就是:如何让一个线程和另外一个线程合作. 在同一时间段会存在多个线程,当这些线程同时存取同一数据时,就会 ...
- 《Win32多线程程序设计》学习笔记 第17章 OLE ActiveX COM
Apartment Model 在该模型中,一个对象和一个特定的线程有关联,只有在该线程的context之中才能够调用该对象. COM的"apartment"是一个对象产生,运作和 ...
- 《Win32多线程程序设计》-侯杰【最后更新日期:16/02/23
[读者背景:零基础] 第1章 为什么要千头万绪 我们通过API函数调整进程的优先级别是基于用户态的,核心态的进程优先级对用户是透明的,用户也无权干涉. 进程包含:内存和资源.资源包括核心对象(file ...
- Win32多线程编程(1) — 基础概念篇
内核对象的基本概念 Windows系统是非开源的,它提供给我们的接口是用户模式的,即User-Mode API.当我们调用某个API时,需要从用户模式切换到内核模式的I/O System Servic ...
- Win32多线程编程(2) — 线程控制
Win32线程控制只有是围绕线程这一内核对象的创建.挂起.恢复.终结以及通信等操作,这些操作都依赖于Win32操作系统提供的一组API和具体编译器的C运行时库函数.本篇围绕这些操作接口介绍在Windo ...
最新文章
- 精美的电路图都是怎么画出来的?
- Flume的安装与配置
- JavaScript中闭包实现的私有属性的getter()和setter()方法
- 【转】PHP的Trait 特性
- 用户研究:如何做用户画像分析
- Python3 爬虫学习笔记 C13【验证码对抗系列 — 滑动验证码】
- wordpress 固定链接变成html,wordpress固定链接只有默认能用,其他链接设置网页打不开怎么办...
- markdown这么好用的东西我才知道。。。多么不折腾的我。。。
- 计算机开机密码设置要求,电脑设置开机密码
- Markdown写作工具盘点
- 《阿里巴巴Java开发手册(正式版)》--安全规约
- 客户细分_客户细分初学者指南
- 计算机学院心理节活动主题,计算机学院举行心理健康教育主题团体活动
- 北大才女笔记:这样学习线性回归和梯度下降(上篇)
- 电商项目业务整体概览
- Android 模拟器一键获取root权限 一键安装Google play 服务
- 有关QSignalMapper的只言片语
- 视频教程-SpringBoot实战视频教程-Java
- Scrum 使用絮叨
- vue2-router.beforeEach不同角色登录到不同页面
热门文章
- 我整理的CSS - lbx
- 代码随想录打卡18天
- crf*.bdb文件过大问题处理
- 2021年中国商铺施工面积、新开工面积、销售面积及未来发展趋势分析[图]
- 看守所视频AI行为分析算法
- C plus plus ——【模板应用】
- java.sql.SQLException: sql injection violation, part alway false condition not allow
- 在线画图工具https://www.draw.io/
- 程序猿接单必看的四个平台!!!
- Python定时备份mysql数据库并把备份邮件发送