(MS-DOS) 时间延迟

问题描述 投票:0回答:6

我尝试了几种导致时间延迟的方法,例如 ping 和 dirs。虽然都不是很精确,但是有没有什么合适的方法可以造成时间延迟呢?

我听说了一些事情,尽管它们并不适用于所有计算机,不适用于我的 Windows XP 或大学的 Windows NT。

需要很长时间浏览 Google 上的所有文件才能找到一个好的答案,而且由于我还没有在 Stack Overflow 上找到这个问题,所以我认为自己创建这个问题可能会更好;)

time dos delay
6个回答
6
投票

睡觉

它将允许您执行此操作。


5
投票

<warning>This is a hack</warning>

使用您最喜欢的编程语言(MS-DOS 批处理除外)并创建一个应用程序,该应用程序采用一个参数(等待的毫秒数),然后只需从批处理文件中调用该程序即可休眠所需的时间。

据我所知,这是在 DOS 中执行此操作的唯一可靠方法。


2
投票

如果您无法随批处理文件一起发送另一个程序,请使用 DEBUG 即时编写睡眠命令,然后执行它。

编辑: 上面的回答有点开玩笑。我不会运行其中包含一些调试技巧的批处理文件。我相信在批处理文件中使用延迟的传统方法是 CHOICE 命令。

type nul|choice /c:y /t:y,nn > nul

当然,这在 XP 中不起作用,因为那太方便了。


0
投票

“……正确的方式……”

你不能在 DOS 中这样做。


0
投票

可以达到几毫秒的精度,具体取决于机器的速度。

我刚刚完成了这样一个批处理的创建,虽然我不会与您分享实际的代码,但我会给您一些指导:

  1. 使用%time%变量,并分为子字符串(没有“:”和“。”) - 一个子字符串将获得秒,另一个 - 分钟(您可以添加小时,延迟超过一个小时,甚至合并日期)

  2. 使用 set /A 将时间变量转换为 1 个整数,表示自舍入小时 (X:00:00.00) 以来经过的秒数。添加输入的延迟(以秒为单位)。

  3. 创建一个短循环,将组合 var 的值(在第 2 节中解释)与当前时间进行比较(需要在该循环内重新计算当前组合的 min+sec 值),并在匹配为 true 时退出循环.

这里的一个主要错误修复 - 您需要将所有前面的零截断为将在“set /A”命令中求值的变量。我注意到,当使用前面带有 08 或 09(或简称 08 或 09)的整数时,控制台的求值器(对于此命令)会返回错误。

备注: 这仅适用于启用命令扩展的情况。要测试它,请在例程开始时使用以下命令:

verify other 2>nul
setlocal enableextensions
if errorlevel 1 goto err

然后添加一个名为“err”的错误处理子例程。

如果您想在同一个文件中继续批处理,请在循环子例程之后使用“endlocal”。

顺便说一句,这适用于 Windows XP Service Pack 2 或 3。


0
投票

足够老的 Borland 编译器有一个延迟(ms)API,其参数以毫秒为单位。我无法说出它有多准确。除非您能够访问更准确的时间源,否则 PC 时钟的运行速度约为 18.2 滴答/秒或略快于 55 毫秒。我怀疑 Borland API 能否为您提供更准确的信息。

© www.soinside.com 2019 - 2024. All rights reserved.