C 언어의 Sleep() 함수

C Eon Eoui Sleep Hamsu



사용자 상호작용이 필요한 프로그램을 개발할 때, 애플리케이션이 읽기 쉽고 사용하기 쉽도록 시스템 시간을 조정해야 하는 경우가 있습니다.

예를 들어, 순차적으로 실행될 작업을 사용자에게 알려야 하는 콘솔 응용 프로그램을 개발하는 경우 정보 메시지는 사용자가 삭제되기 전에 읽을 시간을 가질 수 있도록 합리적인 시간 동안 지속되어야 합니다. 프로그램은 다음 명령으로 이동합니다.

이 Linuxhint 기사에서는 sleep() 함수를 사용하여 실시간으로 지연을 생성하는 방법을 배웁니다. 이 함수의 구문과 설명은 물론 POSIX가 1초 미만의 짧은 지연을 생성하기 위해 제공하는 옵션도 보여드리겠습니다. 그런 다음 실제 예제, 코드 및 그림을 사용하여 프로그램 실행을 지연하는 방법과 신호가 이 기능에 미치는 영향을 보여 드리겠습니다.








C 언어의 Sleep() 함수 구문



서명되지 않은 정수 ( 서명되지 않은 정수 비서 )

C 언어의 Sleep() 함수 설명

sleep() 함수는 부호 없는 정수인 'sec' 입력 인수에 지정된 시간(초) 동안 프로세스나 스레드를 절전 모드로 전환합니다. 일단 sleep() 함수가 호출되면 호출 프로세스는 시간이 초과되거나 신호를 받을 때까지 잠자기 상태가 됩니다.



이 기능은 실시간 프로세스 실행 시 1초 이상의 긴 지연을 강제하는 데 자주 사용됩니다. 1초 미만의 지연을 위해 POSIX는 sleep()과 동일한 메서드 호출을 사용하는 마이크로초 해결 함수 usleep()을 제공합니다. 1마이크로초 미만의 지연의 경우 1나노초의 해상도를 갖는 nanosleep() 함수도 있지만 지연 시간을 설정하기 위해 'timespec' 구조를 입력 인수로 사용하는 호출 방법이 다릅니다.





sleep() 함수는 지정된 시간을 모두 소비한 경우 결과로 0을 반환합니다. 지정된 시간이 경과하기 전에 신호가 도착하여 실행이 중단된 경우 해당 시간까지 남은 시간(초)을 반환합니다.

sleep() 함수는 'unistd.h' 헤더에 정의되어 있습니다. 이를 사용하려면 다음과 같이 이 파일을 코드에 포함해야 합니다.



#include

Sleep() 함수를 사용하여 프로세스에 지연을 도입하는 방법

이 예에서는 명령 콘솔에 '경과 시간' 메시지와 프로세스의 경과 시간(초)을 인쇄하는 무한 루프로 구성된 타이머를 만듭니다. 이러한 각 루프는 sleep() 함수로 인한 지연으로 인해 2초마다 반복됩니다.

이를 위해 확장자가 '.c'인 빈 파일에 'stdio.h' 및 'unistd.h' 헤더를 추가합니다. 그런 다음 빈 main() 함수를 열고 경과 시간에 대한 카운터로 사용할 int 유형의 변수 초를 정의합니다.

헤더가 삽입되고 변수가 선언되면 무한 루프를 열고 printf() 함수를 사용하여 메시지와 시간 값을 표시합니다. 다음 줄에서는 time 변수를 2만큼 증가시킨 다음 값 2를 입력 인수로 사용하여 sleep() 함수를 호출합니다. 이러한 방식으로 이 주기는 매초마다 반복되며 경과 시간을 화면에 표시하는 카운터를 얻게 됩니다. 이제 이 애플리케이션의 코드를 살펴보겠습니다. 이 예제의 전체 코드를 살펴보겠습니다.

#include
#include

무효의 기본 ( )
{
정수 = 0 ;
~하는 동안 ( 1 )
{
printf ( '경과 시간: %i \N ' , ) ;
+= 2 ;
( 2 ) ;
}

}

다음에서는 이 코드를 컴파일하고 실행하는 그림을 살펴보겠습니다. 보시다시피, 프로그램은 2초마다 프로세스 실행 이후 경과된 시간(초)을 화면에 인쇄합니다.

Sleep() 함수에 대한 신호의 영향

이 예에서는 sleep() 함수를 사용하여 절전 모드로 전환된 프로세스에 대한 신호의 영향을 관찰하려고 합니다. 이를 위해 main() 함수와 신호 36에 대한 핸들러로 구성된 간단한 애플리케이션을 만듭니다.

main() 함수의 첫 번째 줄에서는 sleep() 함수에서 반환된 값을 저장하는 int 유형의 나머지 변수를 선언합니다. 그런 다음 signal() 함수를 사용하여 핸들러를 신호 36에 바인딩합니다. 다음 줄에서는 두 번째 셸에서 프로세스로 신호를 보내는 데 사용하는 프로세스의 PID를 표시합니다. 마지막으로 sleep() 함수를 호출하고 입력 인수를 두 번째 셸에서 신호를 보낼 수 있을 만큼 긴 60초로 설정합니다. 나머지 변수를 출력 인수로 sleep()에 보냅니다.

신호 36에 첨부된 핸들러는 printf() 함수가 '남은 시간:' 메시지와 신호가 프로세스에 도착할 때 sleep()이 반환한 값을 인쇄하는 코드 줄로 구성됩니다. 여기서 이 예제의 코드를 살펴보겠습니다.

#include
#include
#include
#include <신호.h>

무효의 매니저 ( 정수 남은 ) ;

무효의 기본 ( )
{
정수 남은 ;
신호 ( 36 , 매니저 ) ;
printf ( '프로세스 ID: %i \N ' , getpid ( ) ) ;
남은 = ( 60 ) ;
}

무효의 매니저 ( 정수 남은 )

{
printf ( '남은 시간: %i \N ' , 남은 ) ;
}

다음 이미지는 이 코드의 컴파일 및 실행을 보여줍니다.

이 프로세스에서 신호의 효과를 확인하기 위해 이 코드를 컴파일하고 실행합니다. 그런 다음 두 번째 터미널에서 다음 구문을 사용하여 신호를 보냅니다.

죽이다 - n 신호 PID

다음 이미지는 이전 콘솔의 코드 실행과 다음 콘솔에서 전송된 신호 도착의 효과를 보여줍니다. 보시다시피, 신호는 프로세스를 깨워서 sleep() 함수의 효과를 억제했습니다.

결론

이 Linuxhint 기사에서는 sleep() 함수를 사용하여 지정된 시간(초) 동안 프로세스를 절전 모드로 전환하는 방법을 보여주었습니다. 또한 함수 설명과 호출 방법뿐만 아니라 구문도 보여주었습니다.

실제 예제, 코드 조각 및 그림을 사용하여 프로세스를 절전 모드로 전환하는 방법과 sleep() 함수를 사용하여 신호 도착이 절전 프로세스에 미치는 영향을 보여주었습니다.