良久没有更新博客了,都有点对不起这个账号了。这次跟大家分享的是一种编程思绪,没什么技术含量,但或许能帮得到你。
我们经常会在程序程序中用到Sleep这个办法。Sleep办法用起来十分简单,但是有个问题,就是假如Sleep时间过长,忽然想完毕Sleep,似乎没有什么好的方法,至少目前我是不晓得有什么比拟直接的方法。当然我这里有个间接的方法。
我们都晓得在Sleep的参数是毫秒级别的,而我们用的最多的是秒级别的挂起当前线程,也就是说根本都是给参数值乘以1000来到达秒级。那好我们就应用一下这个一点来转换下思绪来完成提早完毕Sleep。
其实思绪很简单就是大值化小。比方参数是1000,我们能够转换为100(份)*10(基数)。转为代码根本就是100*Sleep(10)。
经过稍加修饰的封装,中心代码如下:
复制代码
1publicsealedclassMySleep
2{
3privatevolatilebool_isSleep=true;
4
5publicvoidOver()
6{
7_isSleep=false;
8}
9
10publicvoidSleep(intms)
11{
12constintbaseTime=10;
13
14if(ms<baseTime)
15{
16System.Threading.Thread.Sleep(ms);
17}
18else
19{
20intloopCount=ms/baseTime;//除以baseTime,代表是baseTime毫秒的几倍
21intsurplusMS=ms%baseTime;//剩余毫秒数
22
23while(_isSleep&&loopCount>0)
24{
25System.Threading.Thread.Sleep(baseTime);
26–loopCount;
27}
28
29if(_isSleep&&surplusMS>0)
30{
31System.Threading.Thread.Sleep(surplusMS);
32}
33}
34}
35}
复制代码
调用示例:
复制代码
1staticvoidMain(string[]args)
2{
3varmySleep=newMySleep();
4System.Threading.Tasks.Task.Factory.StartNew(()=>
5{
6Console.WriteLine(“{0}:Sleepbegin.”,DateTime.Now.ToString(“yyyy-MM-ddHH:mm:ss.fff”));
7Stopwatchsw=newStopwatch();
8sw.Start();
9mySleep.Sleep(10000);
10sw.Stop();
11Console.WriteLine(“{0}:Sleepend.”,DateTime.Now.ToString(“yyyy-MM-ddHH:mm:ss.fff”));
12Console.WriteLine(“Totalsleep{0}ms”,sw.ElapsedMilliseconds);
13});
14
15Console.WriteLine(“Pressanykeytostopsleepnow.”);
16Console.ReadKey();
17mySleep.Over();
18
19Console.WriteLine(“Pressanykeytoclosetheapplication.”);
20Console.ReadKey(true);
21}
复制代码
不提早终止效果:
提早完毕Sleep效果:
以上办法根本到达提早完毕Sleep的下效果。不过在运转期间会产生一些误差,比方baseTime越小,那么产生的循环指令就会越多,误差就会越大,但是会进步终止的效率。所以这一点需求本人略微均衡下。不过我置信,更好的方法会在评论区呈现。等待各位大神的留言。
那么问题来了。既然用了Sleep就是为了挂起当前线程,为什么又要提早终止呢?或者什么样的场景需求这样的操作呢?评论区欢送你的留言。
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com