Wie schlafe ich eine Millisekunde in Perl?


76

Wie schlafe ich in Perl kürzer als eine Sekunde?


22
Es ist, weil ich glaube, dass dieser Titel tatsächlich hilfreicher ist. Lassen Sie mich versuchen, dies zu argumentieren. Was BDF getan hat, war die Frage im Titel zu duplizieren, die keine Ausdruckskraft hinzufügt. Als ich im Internet nach der Antwort suchte, suchte ich tatsächlich nach einem Millisekunden-Schlaf und nicht nach einem "kürzer als eine Sekunde" Schlaf. Ich sage, diese Version hat eine bessere Chance, durch andere Google-Suchanfragen getroffen zu werden als die von BDF. Bitte korrigieren Sie mich, falls ich falsch liege.
ˈoʊ sɪks

Antworten:


109

Von der Perldoc-Seite zum Thema Schlaf :

Für Verzögerungen mit einer feineren Granularität von mehr als einer Sekunde bietet das Time :: HiRes- Modul (von CPAN und ab Perl 5.8 Teil der Standarddistribution) usleep ().

Tatsächlich liefert es usleep()(was in Mikrosekunden schläft) und nanosleep()(was in Nanosekunden schläft). Vielleicht möchten Sie usleep(), was Sie mit einfacheren Zahlen umgehen lassen sollte. 1 Millisekunde Schlaf (jeweils):

use strict;
use warnings;

use Time::HiRes qw(usleep nanosleep);

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

Wenn Sie dazu kein Modul laden möchten (oder können), können Sie möglicherweise auch die integrierte select()Funktion verwenden:

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

7
Vorsichtsmaßnahme: Obwohl Sie nanosleep (1) könnten, haben viele Betriebssysteme eine minimale Granularität; zB glaube ich, dass es in Windows XP 1 ms ist, so dass Sie dort noch 1000000 ns schlafen würden.
Piskvor verließ das Gebäude

13
Auf der Seite zu Time :: HiRes heißt es etwa: "Wenn Sie nanosleep () benötigen, sollten Sie überlegen, ob Perl das beste Tool für Ihren Job ist oder nicht."
Chris Lutz

4
Es gibt auch Time :: HiRes :: sleep (0.3), das 0,3 Sekunden lang schläft.
Peter N Lewis


12

Von perlfaq8 :


Wie kann ich weniger als eine Sekunde schlafen () oder alarmieren ()?

Wenn Sie eine feinere Granularität als die von der Funktion sleep () bereitgestellte 1 Sekunde wünschen, können Sie am einfachsten die Funktion select () verwenden, die in select in perlfunc dokumentiert ist. Probieren Sie die Module Time :: HiRes und BSD :: Itimer aus (erhältlich bei CPAN und ab Perl 5.8. Time :: HiRes ist Teil der Standarddistribution).



4

Ein kurzes Googeln über "Perl High Resolution Timer" gab einen Hinweis auf Time :: HiRes . Vielleicht ist es das, was du willst.


-1
system "sleep 0.1";

macht den Trick.


Es hat tatsächlich bei mir funktioniert (nicht elegant, aber für Debug-Zwecke scheint es zu funktionieren).
PiotrK
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.