2009-05-22 2 views
67

Как спать на Perl менее чем на секунду?Как спать за миллисекунду в Perl?

+21

Это потому, что я считаю, что это название на самом деле более полезно. Позвольте мне попытаться аргументировать это. Что такое B.D.F. был дубликат вопроса в заголовке, который не добавляет никакой выразительности. Когда я искал в Интернете ответ, я действительно искал миллисекундный сон, а не для «короче второго» сна. Я говорю, что эта версия имеет больше шансов попасть в различные поисковые запросы Google, чем в B.D.F. Пожалуйста, поправьте меня, если я ошибаюсь. –

ответ

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 нс. – Piskvor

+8

Страница во времени :: HiRes говорит что-то вроде «если вам нужно наносить свет(), вы должны пересмотреть, является ли Perl лучшим инструментом для вашей работы». –

+3

Существует также Time :: HiRes :: sleep (0.3), который будет спать на .3 секунды. –

4

Быстрый поиск по страницам "perl high resolution timers" дал ссылку на Time::HiRes. Может быть, это то, что вы хотите.

12

От perlfaq8:


Как я могу спать() или тревоги() для под вторым?

Если вы хотите более тонкую детализацию, чем 1 секунду, что обеспечивает функция sleep(), самый простой способ - использовать функцию select(), как описано в select perlfunc. Попробуйте модули Time :: HiRes и BSD :: Itimer (доступные из CPAN и начиная с Perl 5.8 Time :: HiRes является частью стандартного дистрибутива).

-3
system "sleep 0.1"; 

делает трюк.

Смежные вопросы