2014-07-18 47 views
1

我有這個while循環:如何讓我的while循環每分鐘啓動一次?

while (now() > timeToday(checkTime).time && now() < timeToday(arrivalTime).time){ 

我想這個循環運行,只有當實時時鐘的秒命中00基本上使循環每分鐘運行一次。我這樣做是因爲我寫的IDE只允許最多暫停15秒。不幸的是sleep()不在SmartThings IDE

我在想這樣的事情

while (now() > timeToday(checkTime).time && 
     now() < timeToday(arrivalTime).time && 
     Date.parse('ss', now() = 00).time){ 

在所有的選項,但我與它摸索。

如果有更好的方法來做到這一點比有條件,請讓我知道。

+0

任何原因'Thread.sleep'(或Groovy的默認靜態'睡眠')將無法正常工作? –

+3

它是什麼IDE? –

+0

SmartThings IDE – Brian

回答

2

SmartThings終於給出了一個答案,並表示使用他們的runIn(60, myHandler)邏輯。

感謝您的每一個輸入。

1

你可以嘗試sleep 60*1000來遍歷下一個週期

while true 
{ 
    sleep 60*1000 
    //do your stuff here 
    //make sure to include break logic to exit out of the loop 
} 
+0

IDE不會允許'sleep()':( – Brian

+0

'java.lang.SecurityException:調用類script14057093772401260321749.sleep()不允許@ line 140' – Brian

2

對於方案之前,在一個循環中一分鐘的睡眠,如「每分鐘一次」,你可以看看TimerTask可以在很容易地使用常規的方式。

new Timer().schedule({ 
    // your logic here 
} as TimerTask, startTime, 1000) 

我建議閱讀javadoc徹底瞭解調度合約(tick的正確性)。