需要每5秒鐘運行一個子程序,但在系統時鐘標記處測量。所以,需要開始每分鐘0,5,10,15 .... 45,50,55秒(精確地說,精確到0.1秒)。在精確的時間運行子程序,精度爲0.1s,精度爲perl
是這樣的:
for(;;) {
do_sleep(); #time need to sleep to the next 5 second mark
run_this();
}
的run_this
子可快可慢(其0.2之間運行時 - 120秒)。當運行時間超過5秒 - 無論運行時間如何,下一次運行必須精確到5秒。
E.g.當run_this
- 結束於11:11:12.3需要在11點11分十五秒
- 等待2.7秒下一個運行時在端部11:11:59.2需要等待只有0.8秒至下一個在11:12:00,依此類推...
問題是:如何編寫do_sleep?
如果'run_this()'可能需要超過5秒鐘,那麼沒有辦法保證'run_this()'將每5秒運行一次。不是在一個線程中,反正......如果'run_this()'是線程安全的,那麼你可以讓一個線程每五秒鐘啓動一個'run_this()'。 – 2012-07-30 19:51:39
我的意思是在分組結束後5秒鐘不睡覺。所以當運行時間爲53.2秒時,睡眠時間爲1.8秒,接下來的5秒標記。 – kobame 2012-07-30 19:57:19
啊,好的。在那種情況下,jm666或者Jim Corbett的答案都應該有效。 – 2012-07-30 19:59:36