Thread.Sleep(1);Thread.Sleep(10);Thread.Sleep(100);Thread.Sleep(1000);的实际效果

问题描述

Thread.Sleep(1);Thread.Sleep(10);Thread.Sleep(100);Thread.Sleep(1000);的实际效果为什么不是暂停1ms、10ms、100ms、1000ms呢?privatevoidbutton_DJQiDong_Click(objectsender,EventArgse){label0.Text=DateTime.Now.ToString()+":"+DateTime.Now.Millisecond.ToString();Thread.Sleep(1);label1.Text=DateTime.Now.ToString()+":"+DateTime.Now.Millisecond.ToString();Thread.Sleep(10);label10.Text=DateTime.Now.ToString()+":"+DateTime.Now.Millisecond.ToString();Thread.Sleep(100);label100.Text=DateTime.Now.ToString()+":"+DateTime.Now.Millisecond.ToString();Thread.Sleep(1000);label1000.Text=DateTime.Now.ToString()+":"+DateTime.Now.Millisecond.ToString();}为什么暂停了15ms、16ms、109ms和1000ms不一样,为什么

解决方案

解决方案二:
这里指的是毫秒1000毫秒=1秒
解决方案三:
楼主你有没想过如果你中间不加Thread.Sleep,你认为所有时间都会相同吗
解决方案四:
本身sleep并不精确sleep(0),sleep(1),sleep(10),实际测试效果没什么不同.到100的级别才有明显区别.而且DateTime.Now取值也并不是连续的.你可以试试不加sleep,循环10W次输出DateTime.Now
解决方案五:
DateTime.Now.ToString("yyyy-MM-ddHH:mm:ss.fff")这样写起来要简化多了
解决方案六:
其实时间格式化字符串可以精确到小数点后6位不过DateTime.Now本身并没有那么精确.显示6位也并不是从最低位开始改变的.一变就变好几位.
解决方案七:
额,这个问题涉及到windows线程的知识,thread.sleep(-1)会告诉系统永远不调度这个线程,thread.sleep(0)会告诉系统当前线程放弃了他当前的时间片的剩余部分,强迫系统调度另一个线程,thread.sleep(1)总是强迫cpu执行一次上下文切换,实际上线程睡眠的时间会大于1毫秒,thread.sleep方法,会导致线程挂起自身大约多长时间,而这个时间不是一个固定值,比如说你传入的是100可能线程实际的睡眠时间会超过100毫秒或者小于100ms这只是一个大概的值。比如说如果你这个线程的优先级比较低,你让它睡眠1秒,可能在1秒后系统有优先级比它高的线程,系统并不会在1秒后调度你的线程,它会先调度优先级高的线程。说了那么多就是想告诉你,sleep-1,0,1的效果是不一样的,sleep方法的目的是为了让你的线程延迟调用,而你传入的时间对于系统来说也只是一个大概的值。
解决方案八:
刚才实测了一下,循环100次sleep(0)用时0sleep(1)用时1.5625ssleep(2)用时1.5625ssleep(10)用时1.5625ssleep(15)用时1.5625s在sleep(16)开始有变化,时间延长了一倍,3.125一直到sleep(31)都是3.125
解决方案九:
跟cup线程调度时间片的长短有关系
解决方案十:
引用7楼Z65443344的回复:

刚才实测了一下,循环100次sleep(0)用时0sleep(1)用时1.5625ssleep(2)用时1.5625ssleep(10)用时1.5625ssleep(15)用时1.5625s在sleep(16)开始有变化,时间延长了一倍,3.125一直到sleep(31)都是3.125

额新技能
解决方案十一:
这个问题之前有讨论过。首先,你的Windows中的Thread.sleep()是有误差的,并不是绝对精确的。原因是因为windows操作系统是一个分时操作系统而不是一个实时操作系统,线程调度,切换也是要花费时间的。一些比较特殊的场景才用实时操作系统,比如军工的一些域。
解决方案十二:
引用10楼MicrosoftCenterOfHN的回复:

这个问题之前有讨论过。首先,你的Windows中的Thread.sleep()是有误差的,并不是绝对精确的。原因是因为windows操作系统是一个分时操作系统而不是一个实时操作系统,线程调度,切换也是要花费时间的。一些比较特殊的场景才用实时操作系统,比如军工的一些域。

做控制的话还是要用PLC吧?台式机最大的作用是人机交互,要将数据显示给用户看,要能响应用户的操作.都是在跟人打交道.而对于人来说,1毫秒跟200毫秒有什么差别么?人只对500毫秒以上的时间能够分辨.
解决方案十三:
因为每次sleep后,都重新按优先级排队。sleep结束,排队正赶上它优先级最高就先处理它,否则就先处理其他线程。嘻嘻,刚刚学到的~~~~~
解决方案十四:
引用12楼nan2008zzu的回复:

因为每次sleep后,都重新按优先级排队。sleep结束,排队正赶上它优先级最高就先处理它,否则就先处理其他线程。嘻嘻,刚刚学到的~~~~~

跟谁学,被谁坑?
解决方案十五:
引用13楼sp1234的回复:

Quote: 引用12楼nan2008zzu的回复:
因为每次sleep后,都重新按优先级排队。sleep结束,排队正赶上它优先级最高就先处理它,否则就先处理其他线程。嘻嘻,刚刚学到的~~~~~

跟谁学,被谁坑?

哈哈。自学
解决方案:
以前的电脑只有一个cpu然后我电脑上开了画图板和记事本两个程序所以说为了让用户觉得两个程序都在运行所以让画图板执行一段时间然后又马上切换到记事本去这样用极快的速度在这两个程序中切换执行用户就感觉到这两个程序是在正常的运行多线程差不多就是这个效果和原理而windows的时间片是10毫秒也就是说假设你现在电脑上只有两个线程TA和TB那么windows会在TA上执行10毫秒然后立马去执行TB然后又去执行TA但是如果这个时候在TA中出现sleep(20)那么系统认为TA要放弃这10毫秒的执行权利然后又跑去TB上执行10毫秒回来再去TA发现还没有到20毫秒于是继续切换到TB上去知道切回到TA的时候过了20毫秒TA才会有继续执行的权利所以说你的每一个Sleep效果都是大于等于你要sleep的时间的如果现在出现了很糟糕的情况系统中所有运行的程序的所有线程假设一共有100个线程而这100个线程里面全部都是死循环cpu处于满载状态那么每个线程都会把10毫秒占用完也就是在切换一圈回来时候即使你写的是sleep(1)回来的时候也是过了100*10毫秒了。。。
解决方案:
时间精度问题,sleep精度不确定,我只记得msdn上看到过timer精度是30毫秒

时间: 2024-09-21 05:43:30

Thread.Sleep(1);Thread.Sleep(10);Thread.Sleep(100);Thread.Sleep(1000);的实际效果的相关文章

大家来看下年薪1万、10万和100万的不同生活对比第1/3页_经典网摘

在不同的城市里,年薪1万.10万.100万的人士分别过着怎样的生活呢? 年薪1万:幸福感+郁闷 他大学毕业后,就在内地某小城市或并不算发达的中等城市工作,月薪800元,工作轻松,生活节奏较慢. 职业生涯每天早上8时上班,不提前也不迟到.拎着在街口买的包子油条到办公室,先倒了一杯热茶,坐下来,吃早餐,边看当天的<人民日报>.<参考消息>.<中国青年报>和本省的报.差不多半个小时之后,他开始工作. 午饭是在单位食堂吃,4元钱左右,单身的职工们在此相聚,成了家的同事大多回家吃

投资者何时才能迎来“10年长大100倍”的创新型公司?

中国正处于经济转型期,但投资者何时才能迎来"10年长大100倍"的创新型公司? 江怡曼 在大洋彼岸,眼下风头最劲的公司当属苹果.到昨晚截稿时,苹果的市值为2384.9亿美元,直逼老对手微软的2580亿美元.市场普遍预期,凭借iPhone和iPad的出色表现,苹果将一举超越微软,坐上市值老大的位置. 回首国内,A股市场上,"市值争夺战"却显得乏善可陈--有资格参战的总是工行(601398.SH).中石油(601857.SH)这样的大型央企. 尽管前有神州泰岳(3000

10 个非常酷的基于jQuery的菜单效果插件

除了直观的界面效果外,炫酷的网站导航菜单或右键菜单也能为访问者带来眼前一亮的感觉.本文为你带来10个非常酷的基于jQuery的菜单效果插件.  1.  右击菜单  一个创建右击菜单的插件,简洁且易用.  源码/演示  2.  jQuery多级菜单--FX CSS菜单与子菜单  使用CSS创建菜单,使用JavaScript展示效果.特点如下:  跨浏览器,兼容所有浏览器(包括IE6). 效果:在鼠标经过和子菜单展开时,具有平滑的淡入淡出效果. 易于设置:简单的.用于无限级别菜单项目的嵌套无序列表.

都是心太急惹的祸彩民险把10万当100元兑

刮彩票中奖了,但奖金数字才刮出"¥100"就兴奋地拿给销售员兑奖了,要不是体彩销售员讲诚信,刮开全部数字告知是"¥100000",10万元大奖可就落入别人口袋了.7月21日,前来顺德体彩中心兑取"五倍幸运"10万大奖的王先生,一个劲夸体彩销售人员诚信. 10元换来10万元大奖 7月21日,顺德伦教22107体彩网点传出刮中10万元顶呱刮大奖的喜讯.当天下午5点15分左右,三个小伙子走进顺德体彩中心兑奖大厅,其中一位拿出一张"五倍幸运&q

10个让你iPhone6 plus拍照拍出好效果实用技巧

毫无疑问,iPhone是全世界范围内最受欢迎的拍照设备.虽然它们的性能不及专业单反,但简单的使用体验.高质量的拍摄效果在众多手机中还是独树一帜的.当然,要想使用iPhone拍摄出效果更好的照片,还是需要一些小技巧,大家不妨来了解一下. 1. 快速开启相机 虽然iOS平台拥有数量繁多的第三方拍照应用,但如果你追求最方便的拍摄体验,那么原生相机就是最好的选择.在锁屏界面中,你可以看到右下角有一个小相机图标,只要向上拖动,就可快速开启相机,非常方便. 2. 第三方相机应用实现高级功能 如果你想要更加专

中网大数据应用 10岁和100岁的差距

10岁,中网;四大满贯,最年轻澳网也有108岁,最年长温网136岁."中网迈向全球第5大满贯目标不会动摇." 中网赛事总监张军慧说.   中网,向"第五大满贯"迈进之路还有有多遥远? 中网要打造怎么样的一种网球文化   "或许,几十年内都看不到,需要一代人.两代人的努力,但是随着时间的推移,我相信我们可以达成这一目标." 张军慧一席话又让我们感觉到现实的残酷.   这并不可怕,关键在于要知道中网将如何跨越四大满贯百年的发展.单纯从赛事本身因素看,

Windows 10下开始菜单Aero Glass磨砂与透明效果的开启

1. 我们在win10中同时按下"Win+R" 然后会打开"运行"菜单: 2. 然后我们在运行框中我们输入 "regedit"启动注册表编辑器,需要管理员权限. 3. 然后我再定位到:HKEY_CURRENT_USER -> SOFTWARE -> Microsoft -> Windows -> CurrentVersion -> Themes -> Personalize 如下图所示细节如下所示 4. 然后我

swing- 执行到 NativeInterface.runEventPump 页面卡死

问题描述 执行到 NativeInterface.runEventPump 页面卡死 最近公司要做一个C/S架构的系统,需要一个swing的浏览器,在网上找到了一段代码,不明白单独运行打开的时候没有问题,但是将浏览器绑定到一个组件上,点击组件打开就页面卡死,不会动了,求指教,代码如下: Swing浏览器: import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax

BigDecimal

/* * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ /* * Portions Copyright IBM Corporation, 2001. All Rights