web-dev-qa-db-ja.com

Perlで1ミリ秒間スリープするにはどうすればよいですか?

Perlで1秒より短い時間スリープするにはどうすればよいですか?

71
ˈoʊ sɪks

sleep のPerldocページから:

1秒よりも細かい粒度の遅延の場合、 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);
_
104
Chris Lutz

時間::高解像度:

  use Time::HiRes;
  Time::HiRes::sleep(0.1); #.1 seconds
  Time::HiRes::usleep(1); # 1 microsecond.

http://perldoc.Perl.org/Time/HiRes.html

34
Greg

perlfaq8 から:


1秒未満でsleep()またはalarm()するにはどうすればよいですか?

Sleep()関数が提供する1秒よりも細かい粒度が必要な場合、最も簡単な方法は、perlfuncのselectに記載されているselect()関数を使用することです。 Time :: HiResおよびBSD :: Itimerモジュールを試してください(CPANから入手でき、Perl 5.8 Time :: HiResからは標準配布の一部です)。

12
brian d foy

Time :: HiRes を使用します。

6
TML

「Perl高解像度タイマー」の簡単なグーグルで Time :: HiRes を参照しました。たぶんそれはあなたが望むものです。

4
JesperE