Sleep和 SleepEx函数的功能是在指定的执行时间内中止所在线程的执行。
SleepEx扩展了Sleep的功能,在最短超时时间间隔已到的情况下恢复线程执行外,在以下两种情况下发生时也可以恢复执行:I/O完成回调函数被调用、异步过程调用(APC)被安排进入线程中。
 
 
Sleep函数原型:
VOID WINAPI Sleep(
    DWORD dwMillseconds);
 
dwMilliseconds: 指定线程挂起最短时间间隔,以ms为单位。如设为常数INFINITE,表示将一个线程永久性的催眠
返回值:无。
 
SleepEx函数原型:
DWORD WINAPI SleepEx(
    DWORD dwMillesconds,
    BOOL bAlertable);
参数:
dwMilliseconds: 指定线程挂起最短时间间隔,以ms为单位,时间一到不管后面参数如何都会返回,如设为常数INFINITE,表示将一个线程永久性的催眠
bAlertable: 设置为FALSE,那么,在线程挂起期间不会响应。即使一个I/O完成回调函数被调用或有新的APC排进入,他们使函数返回,也不会被执行。//若是 True, 只要有 APC 函数申请, SleepEx 不管第一个参数如何都会把 APC 推入队列并随 APC 函数一起返回.//注意: SetWaitableTimer 和 SleepEx 必须在同一个线程才可以.
如用一个ReadFileEx   或   WriteFileEx函数调用初始化了一个异步I/O传输,而且我们希望函数返回,以便由那些函数指定的I/O结束例程能正常执行,就设为TRUE。
 
返回值:
 Long。返回0表示时间间隔完成,返回WAIT_IO_COMPLETION表示I/O完成回调函数被调用。
 
APC是内核的一种软中断性质的东西,后面那个参数应该是这个意思,如果是false,就算有APC被插入,也要等到等待的时间到了,SleepEX才退出,如果是false,那只要有新的APC被插入了,SleepEx就马上返回了。 其实Windows的内核中Sleep就简单地理解就是线程挂在那里多少时间,不对这个线程调度。CPU的时间片都分配到其他线程中,除非等待时间到了,再继续调度和分配时间片。APC就相当于一个额外的调度。
 
 
 

像谷歌的这段,我也搜索看过

如设为常数INFINITE,表示将一个线程永久性的催眠     UpK软件安全社区3 a2 B: g3 Q/ U2 h7 v' y8 Q) u: Q8 d0 J3 B7 j9 D4 K
  bAlertable   Long,如用一个ReadFileEx   或   WriteFileEx函数调用初始化了一个异步I/O传输,而且我们希望函数返回,以便由那些函数指定的I/O结束例程能正常执行,就设为TRUE$ K6 t; _- A% l6 v% b

是什么意思?当参设为无限时间的时候,调用ReadFileEx后就返回?

不是这个意思,对线程的APC操作一般都是ring0里面搞的,ring3下也可以搞,不过绝对不是你理解的ReadFile什么的函数。+ [' u. N+ k# O  \0 `% A

比如这么说把,搞一个dll的注入,可以用两种方式,一种是用CreateRemoteThread函数(CreateRemoteThread 最后在ring0是否还是调用了插入APC,我没有去了解),另外一种就是直接插入一个APC。
/ n6 M; }# K/ q5 }# p9 u
假设你的线程一直在SleepEx(-1,false),如果这个时候有人想用APC在你的线程里增加一个新的调度,那这个调度是不会被执行的,因为线程在内核里标记为挂起,如果你用SleepEx(-1,True),那会被马上调度这个Apc而且SleepEx函数返回。

Sleep和 SleepEx函数的更多相关文章

  1. 重叠I/O模型

    一. 重叠I/O的概念当调用ReadFile和WriteFile时,如果最后一个参数lpOverlapped设置为NULL,那么线程就阻塞在这里,直到读写完指定的数据后,它们才返回.这样在读写大文件的 ...

  2. 第9章 用内核对象进行线程同步(2)_可等待计时器(WaitableTimer)

    9.4 可等待的计时器内核对象——某个指定的时间或每隔一段时间触发一次 (1)创建可等待计时器:CreateWaitableTimer(使用时应把常量_WIN32_WINNT定义为0x0400) 参数 ...

  3. Windows高精度时间

    目录 第1章计时    1 1.1 GetTickCount    1 1.2 timeGetTime    1 1.3 QueryPerformanceCounter    1 1.4 测试     ...

  4. 套接字I/O模型-重叠I/O

    重叠模型的基本设计原理是让应用程序使用重叠的数据结构,一次投递一个或多个WinsockI/O请求.针对那些提交的请求,在它们完成之后,应用程序可为它们提供服务.模型的总体设计以Windows重叠I/O ...

  5. 深入理解Windows X64调试

    随着64位操作系统的普及,都开始大力进军x64,X64下的调试机制也发生了改变,与x86相比,添加了许多自己的新特性,之前学习了Windows x64的调试机制,这里本着“拿来主义”的原则与大家分享. ...

  6. windows 下文件的高级操作

    本文主要说明在Windows下操作文件的高级方法,比如直接读写磁盘,文件的异步操作,而文件普通的读写方式在网上可以找到一大堆资料,在这也就不再进行专门的说明. 判断文件是否存在 在Windows中并没 ...

  7. windows 线程

    在windows中进程只是一个容器,用于装载系统资源,它并不执行代码,它是系统资源分配的最小单元,而在进程中执行代码的是线程,线程是轻量级的进程,是代码执行的最小单位. 从系统的内核角度看,进程是一个 ...

  8. 一个无锁消息队列引发的血案(五)——RingQueue(中) 休眠的艺术

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  9. WinSock 重叠IO模型

    title: WinSock 重叠IO模型 tags: [WinSock 模型, 网络编程, 重叠IO模型] date: 2018-06-29 20:26:13 categories: Windows ...

随机推荐

  1. cps在jenkins构建报错

    修改ares的版本号即可,改为2.0.1.14-20191126-RELEASE

  2. 在网址前加神秘字母,让你打开新世界(z)

    在网址前加神秘字母,让你打开新世界 1.在百度云后面加“wp”可以高速下载百度云资源<ignore_js_op> 2.在任何网址前面加“wn.run”(一定要加到这个网址www的前面)之后 ...

  3. Java分布式:分布式服务框架——ZooKeeper

    Java分布式:ZooKeeper——核心概念 ZooKeeper 统一配置管理 统一命名服务 分布式锁

  4. Git 克隆

    工作中大家分工协作,共同开发维护一个项目,git仓库放在公共的服务器上,如github.Gitee等. 在这种情况使用git,需要先克隆仓库到本地. 克隆非常简单,使用命令git clone 将远程仓 ...

  5. html5传感器

    html5传感器(注意苹果和安卓方向是相反的 回调函数触发的速度苹果要快很多 设置坐标不要设置在回调函数里)以下是代码<pre><!DOCTYPE html><html ...

  6. ES-PHP向ES批量添加、查询文档报 No alive nodes found in your cluster

    转自: https://blog.csdn.net/itfootball/article/details/53637238 问题描述为了提高保存数据到es消耗的时间,采取积攒到3000条文档的时候才保 ...

  7. JVM 堆内存设置原理

    堆内存设置 原理 JVM堆内存分为2块:Permanent Space 和 Heap Space. Permanent 即 持久代(Permanent Generation),主要存放的是Java类定 ...

  8. spring整合mybatis报.UnsatisfiedDependencyException错误

    tomcat启动报org.springframework.beans.factory.UnsatisfiedDependencyException:错误 org.springframework.bea ...

  9. opencv之重映射

    好久没写呆码了 今天发个重映射 #include "opencv2/video/tracking.hpp" #include "opencv2/imgproc/imgpr ...

  10. 洛谷P5022 旅行 题解

    前面几个代码都是部分分代码,最后一个才是AC了的,所以最后一个有详细注释 安利一发自己的Blog 这是提高组真题,233有点欧拉回路的感觉. 题目大意: 一个 连通 图,双向边 ,无重边 , 访问图中 ...