안녕하세요, katte입니다.
이번 글에서는 헤더 파일 <ctime>, c언어에서는 <time.h>를 사용하여 지연시간을 다루는 방법에 대해서 알아보겠습니다.
코드를 짜다보면 현실의 시간을 사용해야 할 때가 꽤 있습니다.
프로그램이 실행된 시점에서 특정 시점까지의 지연시간을 재거나, 어떤 상태로 수 초간 대기를 해야 하는 상황이 있을 수 있겠죠.
이런 경우를 위해 C++은 <ctime>이라는 헤더파일을 제공합니다. C언어에서는 대신 <time.h>를 include하여 사용할 수 있습니다.
먼저 <ctime>에 정의되어있는 clock() 함수는 프로그램이 실행된 시점을 기준으로, 이 함수가 호출된 시점까지 경과한 시간을 리턴합니다.
이 함수의 원형을 살펴보자면 다음과 같습니다.
clock_t clock(void);
리턴형을 보시면 clock_t라는 생소한 자료형이 보이실 겁니다.
clock_t형은 <ctime>에서 clock 함수가 리턴하는 자료형의 대용 이름으로써 새롭게 정의하고 있는 자료형입니다.
C언어와 C++에서는 typedef, 전처리기 등을 이용하여 자료형의 이름을 대신할 새로운 이름을 만들 수 있고,
이를 사용자 정의 자료형이라고도 합니다.
이때, clock_t형은 사용하는 시스템에 따라 long형, 혹은 unsigned int형으로 변환됩니다.
clock 함수를 호출해 경과한 시간을 얻은 것까지는 좋은데, 사실 문제가 하나 있습니다.
바로 clock 함수가 리턴하는 시간의 단위가 우리가 사용하는 초(second) 단위가 아닌 시스템 시간이라는 것이죠.
<ctime>은 이 문제에 대한 해결책으로 CLOCKS_PER_SEC라는 매크로 상수를 정의하고 있습니다.
이 상수는 초당 시스템 시간의 값으로, 시스템 시간을 이 상수로 나누어주면
우리가 익히 사용하는 초 단위의 시간을 얻을 수 있게 됩니다.
반대로 초 단위의 시간에 이 상수를 곱해주면 시스템 단위의 시간을 얻을 수 있습니다.
<ctime>과 clock 함수를 사용하여 간단하게 만들어본 타이머 프로그램입니다.
#include <iostream>
#include <ctime>
int main()
{
std::cout << "초 단위의 시간을 입력해 주세요... ";
int sec;
std::cin >> sec;
const clock_t initial_time = clock();
int counter = 0;
std::cout << counter;
while (clock() - initial_time < sec * CLOCKS_PER_SEC)
{
if (clock() - initial_time > (counter + 1) * CLOCKS_PER_SEC)
{
std::cout << "\r" << counter + 1;
++counter;
}
}
std::cout << "\n" << sec << "초가 지났습니다!\n";
}
사용자가 원하는 시간을 초 단위의 정수로 입력하면, 초를 카운트하며 화면에 출력하기 시작하고,
사용자가 입력한 시간에 도달하면 프로그램이 종료됩니다.
* 해당 글은 'C++ 기초 플러스 6판'을 참고하였습니다.
'Computer > C++' 카테고리의 다른 글
[C++] 입출력과 스트림, 버퍼 (0) | 2022.10.26 |
---|---|
[C++] cin 잘못된 입력 판별하기, 입력 버퍼 비우기 (0) | 2022.10.23 |
[C++] cctype 라이브러리 소개 (0) | 2022.10.23 |
[C++] EOF에 관한 이야기 (0) | 2022.10.22 |
[C++] Range 기반의 for 루프 사용하기 (0) | 2022.10.21 |