Làm thế nào để tôi ngủ trong một phần nghìn giây ở Perl?


76

Làm cách nào để tôi ngủ trong thời gian ngắn hơn một giây ở Perl?


22
Đó là bởi vì tôi tin rằng tiêu đề này thực sự hữu ích hơn. Hãy để tôi thử lập luận điều này. Những gì BDF đã làm là sao chép câu hỏi trong tiêu đề mà không có ý nghĩa rõ ràng. Khi tôi đang tìm kiếm câu trả lời trên web, tôi thực sự tìm kiếm một giấc ngủ mili giây chứ không phải giấc ngủ "ngắn hơn một giây". Tôi nói rằng phiên bản này có cơ hội được hiển thị thông qua các tìm kiếm google khác nhau hơn so với phiên bản của BDF. Nêu tôi sai vui long chân chỉnh tôi.
oʊ sɪks

Câu trả lời:


109

Từ trang Perldoc khi ngủ :

Đối với những độ trễ có độ chi tiết nhỏ hơn một giây, mô-đun Time :: HiRes (từ CPAN và bắt đầu từ phần Perl 5.8 của phân phối chuẩn) cung cấp usleep ().

Trên thực tế, nó cung cấp usleep()(ngủ trong micro giây) và nanosleep()(ngủ trong nano giây). Bạn có thể muốn usleep(), điều này sẽ cho phép bạn giải quyết những con số dễ dàng hơn. Giấc ngủ 1 mili giây (sử dụng từng giây):

use strict;
use warnings;

use Time::HiRes qw(usleep nanosleep);

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

Nếu bạn không muốn (hoặc không thể) tải một mô-đun để thực hiện việc này, bạn cũng có thể sử dụng select()chức năng tích hợp sẵn:

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

7
Lưu ý: mặc dù bạn có thể nanosleep (1), nhiều hệ điều hành có một số chi tiết tối thiểu; Ví dụ: tôi tin rằng đó là 1 mili giây trong Windows XP, vì vậy bạn vẫn ngủ trong cả 1000000 ns ở đó.
Piskvor rời tòa nhà

14
Trang Time :: HiRes nói đại loại như "nếu bạn cần nanosleep (), bạn nên xem xét lại liệu Perl có phải là công cụ tốt nhất cho công việc của bạn hay không."
Chris Lutz

4
Ngoài ra còn có Thời gian :: HiRes :: sleep (0,3) sẽ ngủ trong 0,3 giây.
Peter N Lewis


12

Từ perlfaq8 :


Làm cách nào tôi có thể ngủ () hoặc báo thức () trong vòng chưa đầy một giây?

Nếu bạn muốn có độ chi tiết tốt hơn 1 giây mà hàm sleep () cung cấp, cách dễ nhất là sử dụng hàm select () như được ghi trong tài liệu select trong perlfunc. Hãy thử Thời gian :: HiRes và các mô-đun BSD :: Itimer (có sẵn từ CPAN và bắt đầu từ Perl 5.8 Time :: HiRes là một phần của phân phối chuẩn).



4

Một googling nhanh về "bộ định thời gian có độ phân giải cao perl" đã tham chiếu đến Time :: HiRes . Có lẽ đó là những gì bạn muốn.


0
system "sleep 0.1";

thực hiện thủ thuật.


Nó thực sự hoạt động đối với tôi (không phải là thanh lịch, nhưng đối với mục đích gỡ lỗi thì nó có vẻ hoạt động).
PiotrK 20/09/18

không thực sự hiệu quả, nhưng hữu ích nếu bạn không muốn cài đặt Time :: HiRes nhưng cần một số chế độ ngủ nhỏ hơn 1 giây nhưng đừng quên , việc tạo một shell cho việc này cần thời gian, vì vậy bạn không thể tin tưởng vào độ chính xác !
Jimmy Koerting
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.