《Win32多线程程序设计》(11)---ResumeThread()SuspendThread()

13 篇文章 0 订阅
6 篇文章 0 订阅

初始化一个线程

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() 的最大用途就是用来协助撰写调试器。调试器允许在程序员的控制之下,启动或停止任何一个线程。


文字版电子书-----请点击这里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值