DDK下的Sleep函数KeDelayExecutionThread

2023-10-26

转载自: http://www.programlife.net/ddk-kedelayexecutionthread-like-win32-sleep-api.html

 

许多读者一定使用过Sleep函数。这能使程序停下一段时间。许多需要连续、长期执行,但是又不希望占太多CPU使用率的任务,可以在中间加入睡眠。这样能使CPU使用率大大降低。即使睡眠的时间非常短(几十个毫秒)。
在驱动中也可以睡眠。使用到的内核函数的原型如下:

NTSTATUS                                            
KeDelayExecutionThread (                            
    IN KPROCESSOR_MODE WaitMode,                    
    IN BOOLEAN Alertable,                           
    IN PLARGE_INTEGER Interval                      
    );  


这个函数的参数简单明了。WaitMode请总是填写KernelMode,因为现在是在内核编程中使用。Alertable表示是否允许线程报警(用于重新唤醒)。但是目前没有必要用到这么高级的功能,请总是填写FALSE。剩下的就是Interval了,表明要睡眠多久。 

但是这个看似简单的参数说明起来却异常的复杂。为此作者建议读者使用下面简单的睡眠函数,这个函数可以指定睡眠多少毫秒,而没有必要自己去换算时间(这个函数中有睡眠时间的转换):

#define DELAY_ONE_MICROSECOND 	(-10)
#define DELAY_ONE_MILLISECOND	(DELAY_ONE_MICROSECOND*1000)
VOID MySleep(LONG msec)
{
	LARGE_INTEGER my_interval;
	my_interval.QuadPart = DELAY_ONE_MILLISECOND;
	my_interval.QuadPart *= msec;
	KeDelayExecutionThread(KernelMode,0,&my_interval);
} 


 

当然要睡眠几秒也是可以的,1毫秒为千分之一秒。所以乘以1000就可以表示秒数。

在一个线程中用循环进行睡眠,也可以实现一个自己的定时器。考虑前面说的定时器的缺点:中断级较高,有一些事情不能做。在线程中用循环睡眠,每次睡眠结束之后调用自己的回调函数,也可以起到类似的效果。而且系统线程执行中是Passive中断级。睡眠之后依然是这个中断级,所以不像前面提到的定时器那样有限制。

请读者自己写出用线程+睡眠来实现定时器的例子。

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DDK下的Sleep函数KeDelayExecutionThread 的相关文章

随机推荐

  • windows系统下设置mtu值的方法

    说起 MTU 值 可能许多朋友连听都没听说过 简单来说 我们上网时所进行的操作 都是通过传输一个又一个 数据包 来实现的 而 MTU 值就是用来设定可传输数据包的最大尺寸的 很显然 MTU 值设置得过大或过小 都会在一定程度上影响我们上网的
  • AWS EC2常见问题

    一般性问题 问 什么是 Amazon Elastic Compute Cloud Amazon EC2 Amazon Elastic Compute Cloud Amazon EC2 是一种 Web 服务 可在云中提供大小可调的计算容量 该
  • centos docker 安装mysql方法

    直接docker run mysql 会出错 如下提示 You need to specify one of MYSQL ROOT PASSWORD MYSQL ALLOW EMPTY PASSWORD and MYSQL RANDOM R
  • 电脑老是自动安装流氓软件的解决办法(详解)

    前言 我们老是被一些垃圾软件搞心态 那么这个时候怎么办呢 1 打开链接https free lanzoux com b0cpu1guf 2 点击下载合适版本 在这里我只演示以下这种的 3 解压之后可以看到以下界面 点击运行程序exe 扫描完
  • 集中式架构与分布式概念,大白话解释

    3分钟读懂系统架构演变 了解时下最火的微服务概念 本人将从大到小给你讲授系统架构的演变 此处的大小不是对比项目的大小 而是单个模块的大小 集中式架构 垂直拆分 分布式 服务治理 微服务 咱们先从最大的来 集中式架构 用我的话来讲它最大最笨重
  • 【iOS开发】生成Appicon图标、为iOS应用添加图标

    1 可以使用在线移动图标生成工具 图标工场http icon wuruihong com 网站自动生成iOS所需的所有对应格式的图标 2 如果直接选择iOS 会自动生成29pt 40pt 50pt 60pt 72pt 76pt 83 5pt
  • MinIO的安装与使用

    MinIO的安装与简单使用 简介 MinIO是一款基于Go语言发开的高性能 分布式的 开源的对象存储系统 兼容亚马逊的S3协议 对Kubernetes能够友好的支持 专为AI等云原生工作负载而设计 官网 中文官网 MinIO官网 官网中也有
  • log4j.properties 配置

    Logger级别 WARN 表明会出现潜在错误的情形 ERROR 指出虽然发生错误事件 但仍然不影响系统的继续运行 FATAL 指出每个严重的错误事件将会导致应用程序的退出 ALL 是最低等级的 用于打开所有日志记录 OFF 是最高等级的
  • 一文说清DC-DC BUCK电路(非常详细)

    目录 摘要 BUCK原理 DC DC芯片框图 自举电容 输出电感 输出电容和纹波 损耗 总结 摘要 DC DC BUCK 是硬件工程师工作中使用频率非常高的电路 可以这么说 只要板子不是迷你型的 十有八九都有DC DC 因此 对它的了解与学
  • 利用Python3做词频统计和词云图

    起源 因看到一篇满眼是字的文章 故希望能够快速的检索出关键字 所以尝试用Python3来实现 代码 import jieba import numpy import codecs import pandas import matplotli
  • Error-Java-IJ:Imported project refers to unknown jdks JavaSE-1.7

    ylbtech Error Java IJ Imported project refers to unknown jdks JavaSE 1 7 Import from EclipseImported project refers to u
  • uniapp 使用 axios

    1 先用npm install axios 这就不用说了吧 2 添加配置代码 App vue main js 引入封装后的axios import axios from utils http js 给Vue函数添加一个原型属性 axios
  • 【嵌入式实战】一文拿下 STM32 Lwip MQTT(超详细)

    文章目录 原创声明 前言 一 MQTT 是什么 二 Cube 配置 2 1 STM32 ETH 设置 2 2 修改 PHY 地址 2 3 LWIP 设置 在这里插入图片描述 三 生成工程的简单测试 3 1 手动修改 MAC 地址 3 2 P
  • 网络爬虫之xpath提取文本时的乱码

    问题如下大红框标注部分 解决方案 在请求获取后 加入转换即可解决 r encoding utf 8
  • 不懂技术,又不影响上班,网上的攒营汇适合做副业吗

    什么时候开始副业最好 铁饭碗 一工作就可以立即开始研究副业 社会人 毕业年后可以开始副业 最好是工资接近同龄人倍时 什么时候不适合开始副业 失业时 失业时主要任务是选对一个方向 先找一个稳定的工作发展 因为此时如果你开展副业 由于副业的不稳
  • STM32使用DMA接收串口数据

    目录 01 概述 02 DMA接收 03 中断 04 代码 01 概述 在之前的文章里 STM32串口详解 和 STM32 DMA详解 文章中 详细讲解了STM32的串口和DMA外设 本篇文章将不在细述串口和DMA的知识 在串口讲解的文章中
  • ajax的post请求数据为json格式相关设置

    平时用request封装axios习惯了突然用ajax传参时一直出问题 原来是配置设置错了 ajax type post contentType application json 必须项 dataType json 必须项 data JSO
  • 垃圾大学python小题

    Python程序设计 课程 实验报告四 字符串与正则表达式 文章如果太长请直接复制到sublime text 软件里进行关键字搜索 一 实验目的和要求 理解字符串编码格式 熟练掌握字符串的概念和各种用法 掌握Python标准库string的
  • 2020,会成为区块链在中国的元年吗?

    2020 会成为区块链在中国的元年吗 文章目录 2020 会成为区块链在中国的元年吗 区块链扫盲 区块链释义 区块链历史 区块链的特点 什么是中心化 什么是去中心化 程序员眼中的区块链 区块链的软分叉与硬分叉 以太坊与以太经典 金本位与银本
  • DDK下的Sleep函数KeDelayExecutionThread

    转载自 http www programlife net ddk kedelayexecutionthread like win32 sleep api html 许多读者一定使用过Sleep函数 这能使程序停下一段时间 许多需要连续 长期