C++에서 std::chrono의 사용법은?
_____A1: std::chrono는 C++11부터 제공되는 시간 및 기간 관련 기능을 다루는 표준 라이브러리입니다. 시간 측정, 시간 단위 변환, 기간 표현, 시계 기능 등을 제공합니다.
---
Q2: std::chrono에서 'duration'이란 무엇인가요?
A2: duration은 두 시간 시점(Duration between two time points) 사이의 시간을 나타내는 템플릿 클래스입니다. 기본적으로 두 값과 단위를 담으며, 시간 단위(초, 밀리초, 마이크로초 등)를 나타냅니다.
```cpp
std::chrono::duration
```
---
Q3: std::chrono::time_point란 무엇인가요?
A3: time_point는 특정 시계(clock)에서 측정한 특정 시점(time)을 나타내는 템플릿 클래스입니다. 예를 들어, 시스템 시계(system_clock)의 현재 시간을 나타낼 때 사용합니다.
```cpp
auto now = std::chrono::system_clock::now();
```
---
Q4: 시간 단위 변환은 어떻게 하나요?
A4: std::chrono::duration_cast를 이용해 duration 간 단위 변환이 가능합니다.
```cpp
using namespace std::chrono;
milliseconds ms(1500);
seconds s = duration_cast
```
---
Q5: 현재 시간을 얻으려면 어떻게 하나요?
A5: 다음과 같이 시계를 사용하여 현재 시간을 얻을 수 있습니다.
```cpp
auto now = std::chrono::system_clock::now();
```
system_clock, steady_clock, high_resolution_clock 중 상황에 맞게 선택 가능합니다.
---
Q6: 시간 차이를 측정하려면?
A6: 두 std::chrono::time_point 사이에서 뺄셈을 하면 duration이 계산됩니다.
```cpp
auto start = std::chrono::steady_clock::now();
// 수행할 작업
auto end = std::chrono::steady_clock::now();
auto diff = end - start;
auto ms = std::chrono::duration_cast
std::cout << "소요 시간: " << ms << " ms\n";
```
Q7: sleep/delay를 주려면 어떻게 하나요?
A7: std::this_thread::sleep_for() 또는 std::this_thread::sleep_until() 함수를 사용합니다.
```cpp
include
include
std::this_thread::sleep_for(std::chrono::seconds(2)); // 2초 대기
```
---
Q8: steady_clock과 system_clock의 차이는 무엇인가요?
A8:
- std::chrono::system_clock: 실제 시스템의 현재 시간(UTC기준)
- std::chrono::steady_clock: 절대 시간 변화에 영향받지 않는 불변의 시계. 경과시간 측정용 적합.
---
Q9: duration에서 count() 함수는 무엇인가요?
A9: duration.count()는 저장된 기간 값(정수 또는 부동소수점)을 반환합니다.
```cpp
std::chrono::seconds sec(5);
std::cout << sec.count(); // 출력: 5
```
---
Q10: 임의 단위를 가진 duration을 어떻게 정의하나요?
A10: duration 클래스 템플릿을 직접 사용하여 사용자 정의 단위를 만들 수 있습니다.
```cpp
using my_duration = std::chrono::duration
my_duration d(2); // 2시간
```
---
Q11: std::chrono에서 시간 문자열(format) 출력 방법은?
A11: 기본 std::chrono는 문자열 출력 지원 미비하며 C++20부터는 std::format의 일환으로 확장되었습니다. C++17 및 이전 버전은 time_t 변환 후 strftime을 사용합니다.
```cpp
auto now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
std::cout << std::ctime(&now);
```
C++20 이상에서는 std::format과 std::chrono::format 사용 가능.
---
Q12: high_resolution_clock을 사용해야 할까요?
A12: high_resolution_clock은 구현마다 system_clock 또는 steady_clock과 같거나 더 정밀할 수 있지만, 보통 steady_clock이 안정적인 타이밍 측정을 위해 권장됩니다.
---
요약: std::chrono는 시간 측정, 단위 변환, 시간 차이 계산, 딜레이 등을 안전하고 편리하게 구현하도록 돕는 C++ 표준 라이브러리입니다. 시간 측정 시엔 steady_clock 사용, 현재 시간 취득 시엔 system_clock 사용이 일반적입니다. duration_cast로 단위간 변환하며, sleep_for로 스레드 대기 구현이 가능합니다.
작성자:
이승윤 [비회원]
| 작성일자: 1년 전
2024-09-20 17:11:41
조회수: 215 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 215 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.