Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2697308
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5921
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: WINDOWS

2015-05-29 15:59:58

   在驱动中也可以睡眠。使用到的内核函数的原型如下:

    NTSTATUS
      KeDelayExecutionThread(
        IN KPROCESSOR_MODE  WaitMode,//KernelMode因为现在是在内核编程中使用
        IN BOOLEAN  Alertable,//FALSE
        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就可以表示秒数。
   
阅读(1236) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~