85.24 코드 실행을 늦추기

_sleep, sleep, usleep 함수를 사용하면 일정 시간 동안 코드의 실행을 늦출 수 있습니다(Windows에서 _sleep 함수는 stdlib.h, 리눅스에서 sleep, usleep 함수는 unistd.h 헤더 파일에 선언되어 있습니다). 여기서 밀리초는 1/1000초, 마이크로초는 1/1000000초입니다.

  • _sleep(밀리초): Visual Studio
    • void _sleep(unsigned long _Duration);
  • sleep(초): 리눅스
    • unsigned int sleep (unsigned int __seconds);
  • usleep(마이크로초): 리눅스
    • int usleep (__useconds_t __useconds);

다음은 "There is no place like home. The Wizard of Oz" 문장을 0.5초에 한 글자씩 출력합니다.

sleep.c

#define _CRT_OBSOLETE_NO_WARNINGS    // 구식 함수를 사용했을 때 발생하는 에러 방지
#include <stdio.h>
#include <stdlib.h>      // _sleep 함수가 선언된 헤더 파일
#include <string.h>
//#include <unistd.h>    // 리눅스에서 usleep 함수가 선언된 헤더 파일

int main()
{
    char *script = "There is no place like home.\nThe Wizard of Oz";
    int length = strlen(script);
    
    for (int i = 0; i < length; i++)
    {
        printf("%c", script[i]);
        // fflush(stdout);    // 리눅스에서는 문자 하나씩 출력한 뒤 usleep으로 기다리려면
                              // 출력 버퍼를 비워야 함
        // usleep(500000);    // 리눅스에서 0.5초를 기다릴 때(-std=gnu99 옵션 사용)
        _sleep(500);          // 0.5초
    }    

    return 0;
}

실행 결과

There is no place like home. (0.5초에 한 글자씩 출력됨)
The Wizard of Oz

for 반복문으로 반복하면서 문자열 script의 문자를 하나 출력한 뒤 _sleep 함수로 0.5초 대기하도록 만들었습니다. 이렇게 하면 0.5초에 문자가 하나씩 출력됩니다. 리눅스에서는 usleep 함수를 사용해야 하며 리눅스에서는 문자 하나씩 출력한 뒤 usleep으로 기다리려면 fflush 함수로 출력 버퍼를 비워야 합니다.