#
include
<stdio.
h>
#
include
%dos.
h>
#
include
<stdlib.
h>
void
main(int
argc,char
**
argv)
{
union
REGS
regs:
unsiged
long
delay
delay
=
atoI(argv[1])
/
*
assume
that
there
is
an
argument
*
/
/
*
multiply
by
1
for
microsecond-granularity
delay
*
/
/
*
multiply
by
1000
for
millisecond-granularity
delay
*
/
/
*
multiply
by
1000000
for
second-granularity
delay
*
/
delay
*
=1000000
regs.
x.
ax
=
0x8600
regs.
x.
cx=
(unsigned
int
)((delay
&
0xFFFF0000L)>>16)
regs.
x.
dx
=
(unsigned
int
)
(delay
&
0xFFFF)
int86
(0x15,
&regs,
&regs)
}
上例通过DOS中断15H的86H功能来实现延时,延迟时间以微秒为单位,因此,上述延时程序认为你可能要使用一个非常大的数字,于是它分别用CX和DX寄存器来接受延时值的高16位和低16位。上述延时程序最多可以延时49.亿微妙---大约等于1.2小时。
上例假设延时值以微秒为单位,它把延时值乘以一百万,因此在命令行中可以输入以秒为单位的延时值。例如,“delay
10”命令将产生10秒的延时。
这个建议你去dos联盟看一下。里面有很多讨论,很详细的。如只是应用,下面的应该就足够了:
批处理延时方法小结:
1.ping
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
@echo off
:loop
echo %time%
ping 127.1 -n 2 1>nul
echo %time%
goto loop
内存使用: cmd.exe 1704k
ping.exe 2920k
误差评定: 较高
优点: 代码构造简单
缺点: 内存占用高,延迟时间长的话误差相对较大。
2.还是ping
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
@echo off
:loop
echo %time%
ping 1 -n 1 -w 1000 2>nul 1>nul
echo %time%
goto loop
内存使用: cmd.exe 1700k
ping.exe 2912k
误差评定: 一般
优点:代码构造简单,时间越长误差越小,精确度较高(50ms)
缺点:内存占用高
3.call
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
@echo off
:loop
echo %time%
call :delay 1000
echo %time%
goto loop
:delay
set /a num=num + 1
if %num% geq %1 (set num=) &&goto :eof
remfor /l %%i in (1,1,%1) do echo. >nul
goto :eof
内存使用: cmd.exe 1744k [for语句方案]
cmd.exe 1740k [set+goto方案]
误差评定: 很高 (受CPU频率影响非常大,几乎无法准确把握全局延迟时间)
优点: 精确度较高
缺点:不适合需精确把握时间的场合
4.msg
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
@echo off
:loop
echo %time%
msg %username% /time:20 /w "正在延时,点确定可以取消延时!"
echo %time%
goto loop
内存使用: cmd.exe 1752k
msg.exe 2620k
误差评定: 低
优点: 比较稳定,可中途取消延时,代码构造简单
缺点:内存占用非常大,有窗口d出(优点?缺点?)
5.vbs
CODE: [Copy to clipboard]
--------------------------------------------------------------------------------
@echo off
echo Wscript.Sleep WScript.Arguments(0) >%tmp%\delay.vbs
:loop
echo %time%
cscript //b //nologo %tmp%\delay.vbs 2000
echo %time%
goto loop
内存使用: cscript.exe 4812k
cmd.exe1708k
误差评定: 很低
优点:精确度最高,使用更灵活,方便
缺点:产生临时文件,内存占用多
End:
1.测试条件有限,以上数据并不具备权威性。
2.关于精确度。
其实只要是参数可以指定时间的命令精确度都比较高,之所以受影响是取决与命令执行的次数,次数越多,精确度越低。而方案5[vbs方案]中之所以说它的精确度最高,可以举个例子: cscript //b //nologo delay.vbs 2036,而方案二由于最小精确度的缘故,还是比方案5要差一点。
3.欢迎大家补充。
简单的是你在加载的程序前加上以下两句VBS脚本就能起到延时效果,也不会有什么不良后果
echo Wscript.sleep 30000 >y.vbs
call y.vbs &del y.vbs
30000是毫秒也就是30秒
如果是让几点几分这样的运行可以at命令,但必须开
Task Scheduler这个服务才能用AT命令。
把几个命令用&连接就可以说是一起执行
如果把几个命令用&&连接表示&&前的命令执行成功再执行后面的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)