준호씨의 블로그

perl - millisecond로 sleep주는 방법 본문

개발이야기

perl - millisecond로 sleep주는 방법

준호씨 2021. 1. 19. 23:00
반응형

perl에서 기본 제공되는 함수중 sleep은 초단위로 잠깐 동안 동작을 멈추는 함수입니다.

예제를 봅시다.

#!/usr/bin/perl
use strict;
use warnings FATAL => 'all';

use POSIX 'strftime';

sub print_now {
    my $date = strftime '%Y/%m/%d %H:%M:%S', localtime;
    print $date."\n";
}

print_now();
sleep(1);
print_now();
sleep(1);
print_now();
sleep(1);

결과는 현재 시각을 출력하고 1초 쉬는 것을 3번 반복합니다.

2021/01/17 21:45:36
2021/01/17 21:45:37
2021/01/17 21:45:38

그런데 만약 밀리초만큼만 sleep을 걸고 싶은 경우가 있습니다.

sleep(1) 대신 sleep(0.5)를 주면 어떻게 될까요?

2021/01/17 21:46:38
2021/01/17 21:46:38
2021/01/17 21:46:38

소수점은 무시되고 sleep(0)이 되어버립니다.

만약 밀리초만큼만 sleep을 걸려면 어떻게 해야 될까요?

Time::HiRes 모듈을 사용해야 합니다.

#!/usr/bin/perl
use strict;
use warnings FATAL => 'all';

use Time::HiRes;

use POSIX 'strftime';

sub print_now {
    my $date = strftime '%Y/%m/%d %H:%M:%S', localtime;
    my $t = Time::HiRes::time;
    $date .= sprintf ".%03d", ($t-int($t))*1000;
    print $date."\n";
}

print_now();
Time::HiRes::sleep(0.5);
print_now();
Time::HiRes::sleep(0.5);
print_now();
Time::HiRes::sleep(0.5);

결과는 다음과 같습니다.

2021/01/17 21:57:38.897
2021/01/17 21:57:39.400
2021/01/17 21:57:39.904

 

반응형
Comments