2016-04-25 54 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()