Sleep函数的真正用意

关于VOID Sleep(DWORD dwMilliseconds);函数,许多人都觉得,它是告诉系统,延迟多少毫秒来执行后面的代码。

但是,在WINDOWS这样的非实时多任务系统中,我们是无法估算会睡眠多久的。因为一个线程不是总是被执行的。它会在执行一段时间后,被系统暂停,然后系统又去执行另外的线程代码。于是,Sleep函数的解释如下:

当调用Sleep函数的时候,比如Sleep(400);它告诉系统,此线程将放弃此次运行的时间片,比方说现在线程只执行了10ms,按“有关部门规定”它被唤醒一次是要执行20ms的。这时它就说,这次机会我放弃,后面的10ms不要了。下次轮上我再叫我。 这样,系统便会将其终止,然后再一次进行调度选择。如果它运气很好,又被选中了,系统则会查看这个线程是否处于sleep标志中。如果发现他还需要继续睡眠,则重新进行调度选择,直到选择一个有权执行的线程为止。 如果很不幸,400ms到了,但是系统很忙,调度算法在很长一段时间也没有选择到这个线程,那这么线程就很继续休眠。于是说,这个Sleep(400);将导致这个线程会休眠大于等于400MS的时间。

以前我做程序的时候也用过Sleep来作为控制程序执行速度的方法。现在想来,的确很欠考虑。

关于这个函数更具权威的解释(抄书):

1、调用Sleep,可使线程自愿放弃它剩余的时间片。

2、系统将在大约的指定秒数内使线程不可高度。不错,如果告诉系统,想睡眠100MS,那么可以睡大约这么长的时间,但也也可能睡眠数秒或数分钟。记住,WINDOWS不是个实时操作系统。虽然线程可能在规定的时间被唤醒,但是它能否做到,取决于系统中还有什么操作正在进行。

3、可以调用Sleep(INFINITE),告诉系统永远不要调用这个线程。但最好不要这样,让线程退出就行了。反正你都不再需要它。或者调用Sleep(0);告诉系统线程将放弃剩于的时间片,并使系统调度另一个线程。但是,系统可以对刚刚调用Sleep的线程重新调度。如果不存在多个拥有相同优先级的可调度线程。就会出现这种情况。

posted @ 2010-07-02 00:22 麒麟子(Alex) 阅读(...) 评论(...) 编辑 收藏

Sleep函数的真正用意相关推荐

  1. python函数type的用意_python之type函数

    python 的type 函数 的介绍的 下面就是此函数的参数 三个参数的意义 ''' type(class_name, base_class_tuple, attribute_dict) class ...

  2. python函数type的用意_python中type()是什么意思

    type()是一个内建的获取变量类型的函数. type()函数有两个用法,当只有一个参数的时候,返回对象的类型.当有三个参数的时候返回一个类对象. 语法:type(object) type(name, ...

  3. python函数type的用意_Python内置函数Type()函数一个有趣的用法

    Python内置函数Type()函数一个有趣的用法 今天在网上看到type的一段代码 ,然后查了一下文档,才知道type还有三个参数的用法. 以前只是知道type可以检测对象类型.然后发现了一个有趣的 ...

  4. python函数type的用意_Python中type的构造函数参数含义说明

    测试代码如下: 复制代码 代码如下: class ModelMetaClass(type): def __new__(cls,name,base,attrs): logging.info(" ...

  5. 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结...

    03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...

  6. linux gdb 跳出函数,gdb调试程序时跳进函数和跳出函数

    文章目录 前言 测试代码 代码编译 step/finish组合 step/return组合 总结 前言 说实话平时在Windows平台上开发,gdb调试用的并不是很多,但是一些在linux平台才会出现 ...

  7. gdb调试程序时跳进函数和跳出函数

    文章目录 前言 测试代码 代码编译 step/finish组合 step/return组合 总结 前言 说实话平时在Windows平台上开发,gdb调试用的并不是很多,但是一些在linux平台才会出现 ...

  8. 恶心的openssl。。。

    恶心的openssl... 原文:http://hi.baidu.com/tmy13/item/301eb0db692281e5785daa48 就像我上篇说的那样,果然只要改动一处地方就大功告成了, ...

  9. 【Machine Learning】TensorFlow实现K近邻算法预测房屋价格

    1前言 机器学习KNN算法(K近邻算法)的总体理论很简单不在这里赘述了. 这篇文章主要问题在于如果利用tensorflow深度学习框架来实现KNN完成预测问题,而不是分类问题,这篇文章中涉及很多维度和 ...

最新文章

  1. Kubernetes v1.0特性解析
  2. 编译原理词/语法分析
  3. wxWidgets:wxListItem类用法
  4. C# 之浅拷贝与深拷贝问题拙见(一)
  5. 逃离裁员:程序员在云时代的生存之道
  6. CommonJs、AMD 、CMD 前端开发模块化组合
  7. SpringMVC深入信息提示(四)
  8. Python处理Excel文件(一)
  9. Android 高德地图搜索功能相关
  10. 专属圣诞树+2022跨年HTML(腾讯云部署)
  11. 针孔微创牙龈手术(Pinhole Gum Rejuvenation)
  12. 【计算机视觉】BOF图像检索
  13. 2023在家赚钱怎么做,有什么适合在家做的副业项目
  14. C++经典算法题-洗扑克牌(乱数排列)
  15. python从邮箱获取指定邮件_用python提取并统计指定邮箱里的特定邮件 | 学步园
  16. Mac + Docker + Clickhouse + Dbeaver 套装
  17. 吴佳怡最新街拍曝光  潮酷girl演绎初秋时尚
  18. Facebook创始人扎克伯格呼吁加强互联网监管
  19. STC89C52RC定时器的最基本实例
  20. 苹果三代耳机_苹果三代蓝牙无线耳机

热门文章

  1. 哪吒之魔童降临,中国之文艺复兴
  2. android面试集锦
  3. Java学习之操作符(三)
  4. OpenCV学习五:图片矩形区域的读取
  5. 用王者荣耀来理解java设计模式之责任链模式
  6. CicadasCMS(知了CMS)是一款基于springboot、mybatis、beetl等框架开发的一款内容管理系统
  7. 策略模式详解(英雄联盟上王者案例)
  8. 苹果新款 M2 MacBook Air 是否能冲击 Win 笔记本市场?
  9. 其实,家家都有本难念的经
  10. Python学习之数据库