2009-05-22 32 views
67

我在Perl中如何睡眠時間短於一秒?我如何在Perl中睡一毫秒?

+21

這是因爲我相信這個標題實際上更有幫助。讓我試着去論證這一點。什麼B.D.F.確實是在題目中重複了不加表達的問題。當我在網上尋找答案時,我實際上是在尋找毫秒級的睡眠,而不是「短於一秒」的睡眠。我說這個版本比B.D.F有更好的機會通過不同的谷歌搜索。如果我錯了,請糾正我。 – 2009-07-20 13:52:24

回答

97

從的Perldoc頁上sleep

對於更細的粒度的延遲超過一秒鐘,所述Time::HiRes模塊(來自CPAN,並從開始的Perl的標準分佈的5.8部分)提供usleep()函式。

實際上,它提供usleep()(其睡在微秒)和nanosleep()(其睡在毫微秒)。你可能想要usleep(),這應該讓你處理更容易的數字。 1個毫秒睡眠(使用每個):

use strict; 
use warnings; 

use Time::HiRes qw(usleep nanosleep); 

# 1 millisecond == 1000 microseconds 
usleep(1000); 
# 1 microsecond == 1000 nanoseconds 
nanosleep(1000000); 

如果你不想(或不能)加載模塊要做到這一點,你也可以使用內置的select()功能:

# Sleep for 250 milliseconds 
select(undef, undef, undef, 0.25); 
+5

警告:雖然你可以納睡(1),但許多操作系統都有一些最小粒度;例如我相信它在Windows XP中爲1毫秒,所以你仍然可以在那裏睡1000000 ns。 – Piskvor 2009-05-22 08:56:30

4

「perl高分辨率定時器」的快速搜索引用了Time::HiRes。也許這就是你想要的。

12

perlfaq8


我怎麼能睡覺()或報警()如屬第二下?

如果您希望比sleep()函數提供的1秒更精細的粒度,最簡單的方法是使用select()函數,如perlfunc中的select所述。嘗試使用Time :: HiRes和BSD :: Itimer模塊(可從CPAN獲得,並從Perl 5.8開始,Time :: HiRes是標準分發的一部分)。

-3
system "sleep 0.1"; 

有竅門。