LZ的这个却实是没见过.只能说对P还不了解.以下是小弟学习中查到的,分享一下- @echo off
- set /p delay=请输入需延迟的毫秒数:
- set TotalTime=0
- set NowTime=%time%
- ::读取起始时间,时间格式为:13:01:05.95
- echo 程序开始时间:%NowTime%
- :delay_continue
- set /a minute1=1%NowTime:~3,2%-100
- ::读取起始时间的分钟数
- set /a second1=1%NowTime:~-5,2%%NowTime:~-2%0-100000
- ::将起始时间的秒数转为毫秒
- set NowTime=%time%
- set /a minute2=1%NowTime:~3,2%-100
- :: 读取现在时间的分钟数
- set /a second2=1%NowTime:~-5,2%%NowTime:~-2%0-100000
- ::将现在时间的秒数转为毫秒
- set /a TotalTime+=(%minute2%-%minute1%+60)%%60*60000+%second2%-%second1%
- if %TotalTime% lss %delay% goto delay_continue
- echo 程序结束时间:%time%
- echo 设定延迟时间:%delay%毫秒
- echo 实际延迟时间:%TotalTime%毫秒
- pause
复制代码 实现原理:首先设定要延迟的毫秒数,然后用循环累加时间,直到累加时间大于等于延迟时间。
误差:windows系统时间只能精确到10毫秒,所以理论上有可能存在10毫秒误差。
经测试,当延迟时间大于500毫秒时,上面的延迟程序一般不存在误差。当延迟时间小于500毫秒时,可能有几十毫秒误差,为什么?因为延迟程序本身也是有运行时间的,同时系统时间只能精确到10毫秒 |