2016-04-25 97 views
1

Vbscript新手。 我用两个参数做了一个随机函数,并称它为 它导致无限循环打开无限程序。Vbscript很少执行一个函数,有机会使用随机

Function random(v1,v2) 
Randomize 
rdm =(Int((v2 - v1 + 1)* Rnd + v1)) 
End Function 

Function download() 
Set shell = createobject("wscript.shell"):shell.run "mspaint.exe" 
End function 

'I want this download function to run rarely 
Do 
    Call random(100,1000) 
    If rdm>700 And rdm <760 Then 
    Call download() 
    End If 
loop 
+0

你有一个做...在那里循环;循环的终止条件在哪里?您正在调用该函数来生成随机数,但不会将其存储在任何地方。你的意思是把返回值分配给ram? – MikeC

+0

我想知道如果我可以使用VBScript多任务。运行一个循环 - 用于特定的功能以及同时睡眠其他功能。 C++和其他人都有能力。 vbscript是否允许我? – Akki

回答

2

将代码添加到return值并添加Exit Do语句来打破循环。

希望这将帮助你..

Function random(v1,v2) 
Randomize 
random=(Int((v2 - v1 + 1)* Rnd + v1)) 
End Function 

Function download() 
Set shell = createobject("wscript.shell"):shell.run "mspaint.exe" 
download=true 
End function 

'I want this download function to run rarely 
Do 
    rdm= random(100,1000) 
    If rdm>700 And rdm <760 Then 
    Call download() 
    Exit Do ' this will break the loop if condition is met 
    End If 
loop 
+0

修复了OP的无限循环错误,但请注意,现在你已经拥有它了,'download()'几乎肯定会在几毫秒内运行,因为循环将运行直到触发条件成立。另一方面,真的不清楚OP究竟在尝试怎样处理循环。 –

+0

我是vbscript的新手。有什么公式可以用来很少调用函数。一天3次?用“do-loop”结构,想知道我有多少机会会增加困惑。 – Akki

+0

许多方法可以做到这一点(每天调用3次函数)。确认你的确切要求是什么:(1)。在随机时间,(2)在3个分类时间(3),如果发生任何事件触发。 –

0

如果你的目的是要编写一个脚本,调用时,调用函数的概率900分之60= 1/15,你是做事情太复杂。没有理由生成一个范围在100到1000之间的随机整数,只是为了检查它是否在一定范围内。如果要触发的概率p动作,有一条线,它看起来像:

If rnd() < p Then 'action 

如果我理解你的意图,你的整个脚本可以写成:

Randomize 

Set shell = createobject("wscript.shell") 

If rnd() < 1/15 Then shell.Run "mspaint.exe" 

大部分时间你运行上面的脚本没有任何反应,但平均1/15次将会打开paint。

+0

上面的代码似乎为我提供了mspaint.exe比我使用的机会数快得多。 – Akki

+0

'rnd()'在[0,1]中模拟均匀分布的随机变量。因此'rnd()