接下来是 Test 子例程,在我们单击按钮时调用它:
Sub Test
dtmStartTime = Now
idTimer = window.setTimeout("PausedSection", 5000, "VBScript")
End Sub
请注意,此子例程中仅有两行代码。在第一行中,我们只是将当前的时间和日期(使用 Now 函数)赋予变量 dtmStartTime。接下来是下面这行代码:
idTimer = window.setTimeout("PausedSection", 5000, "VBScript")
无论您相信与否,这就是我们实现 Sleep 方法函数的方式。我们使用 setTimeout 方法创建了一个定时器,其 ID 为 idTimer。正如您所看到的,我们将三个参数传递给 setTimeout:
? PausedSection。此参数为定时器到时后我们要运行的子例程的名称。
? 5000。此参数为在调用 PausedSection 之前我们希望定时器等待的时间(以毫秒计;5000 毫秒等于5 秒)。换句话说,这就是我们需要的暂停。如果需要将脚本暂停 30 秒,则可将此参数设置为 30000。
? VBScript。此参数是必需的,它只是告诉脚本 PausedSection 是用 VBScript 编写的。
即,我们单击按钮时,Test 子例程将运行。Test 子例程运行时,它将创建名为 idTimer 的定时器。idTimer 的唯一功能就是等待 5 秒然后调用子例程 PausedSection。明白了吗?好的。
那么子例程 PausedSection 执行什么操作?显然,我们可以运行任何希望的代码;简单起见,在此我们仅做两件事情。首先,显示一个消息框,它显示我们单击此按钮的时间及消息框自身实际显示在屏幕上的时间:
Msgbox dtmStartTime & vbCrLf & Now
若允许舍入误差,这两个时间的间隔应为 5 秒。这重要吗?当然重要。请记住,在 PausedSection 子例程内部首先发生的就是显示此消息框。如果此消息框在我们单击按钮 5 秒之后显示,则表明我们的脚本暂停了 5 秒。您可能会记起,这就是我们的最终目的。
我们在 PausedSection 子例程中要做的另外一件事情就是调用 clearTimeout 方法来有效地清除定时器:
window.clearTimeout(idTimer)
为什么这样做?原因很简单:定时器是设计为永远运行的。如果不清除定时器,每 5 秒钟 idTimer 就将调用 PausedSection 子例程一次,因此每 5 秒钟我们的这个小消息框就会在屏幕上弹出一次。我们真的不希望每 5 秒钟就看到这样的消息框,因此使用 clearTimeout 删除定时器。
我们承认,这确实不如使用 Wscript.Sleep 5000 那么简单;这表明在您启用和禁用定时器之前可能不得不稍稍掂量一番。因此,这或许带点挑战,但是,别忘了,这不也是生命的全部意义所在吗?







