future_status — std::future_status
future_status — std::future_status
std::future_status는 std::future/std::shared_future의 wait_for와 wait_until 함수가 반환하는 future의 상태를 지정하는 열거형이에요. C++11에서 도입됐어요. <future> 헤더에 있어요.
출처: cppreference
본문
// <future> 헤더, C++11
enum class future_status {
ready,
timeout,
deferred
};
열거자 의미
| 열거자 | 의미 |
|---|---|
ready |
결과가 준비됨 |
timeout |
시간 제한 내에 결과가 준비되지 않음 |
deferred |
지연된(deferred) 작업 — 아직 실행되지 않음 |
사용 예
#include <future>
#include <iostream>
#include <thread>
std::future<int> f = std::async(std::launch::async, [] {
std::this_thread::sleep_for(std::chrono::milliseconds(500));
return 42;
});
auto status = f.wait_for(std::chrono::milliseconds(100));
// 100ms 동안 대기
switch (status) {
case std::future_status::ready:
std::cout << f.get() << '\n'; // 준비됨
break;
case std::future_status::timeout:
std::cout << "아직 준비 안 됨\n";
break;
case std::future_status::deferred:
std::cout << "지연 실행\n";
break;
}
특징
- 비차단·시간 제한 대기의 결과를 나타내요.
deferred는std::async(std::launch::deferred, ...)로 만든 future가 아직 실행되지 않았을 때 반환돼요.- 반복하며 상태를 폴링해 작업 완료를 감지할 수 있어요.
// 폴링 루프
while (f.wait_for(std::chrono::milliseconds(10)) != std::future_status::ready) {
// 아직 진행 중
}
int result = f.get();
std::future_status는 시간 제한 대기에서 future 작업의 진행 상태(준비·시간초과·지연)를 구분하는 데 사용해요.