packaged_task 클래스
비동기 공급자(해당 호출 시그니처가 Ty(ArgTypes...)
인 호출 래퍼)를 설명합니다. 비동기 공급자의 연결된 비동기 상태에는 잠재적 결과와 함께 호출 가능 개체의 복사본이 포함됩니다.
구문
template <class>
class packaged_task;
멤버
공용 생성자
속성 | 설명 |
---|---|
packaged_task | packaged_task 개체를 생성합니다. |
packaged_task::~packaged_task 소멸자 | packaged_task 개체를 제거합니다. |
공용 메서드
이름 | 설명 |
---|---|
get_future | 동일한 연결된 비동기 상태가 있는 future 개체를 반환합니다. |
make_ready_at_thread_exit | 연결된 비동기 상태에 저장되어 있는 호출 가능 개체를 호출하고 반환된 값을 원자 단위로 저장합니다. |
reset | 연결된 비동기 상태를 대체합니다. |
swap | 연결된 비동기 상태를 지정된 개체와 교환합니다. |
유효한 | 개체에 연결된 비동기 상태가 있는지를 지정합니다. |
Public 연산자
속성 | 설명 |
---|---|
packaged_task::operator= | 지정된 개체에서 연결된 비동기 상태를 전송합니다. |
packaged_task::operator() | 연결된 비동기 상태에 저장되어 있는 호출 가능 개체를 호출하고 반환된 값을 원자 단위로 저장한 후에 상태를 ready로 설정합니다. |
packaged_task::operator bool | 개체에 연결된 비동기 상태가 있는지를 지정합니다. |
요구 사항
헤더:<future>
네임스페이스: std
packaged_task::get_future
동일한 연결된 비동기 상태가 있는 future<Ty>
형식의 개체를 반환합니다.
future<Ty> get_future();
설명
packaged_task
개체에 연결된 비동기 상태가 없는 경우 이 메서드는 오류 코드가 no_state
인 future_error를 throw합니다.
이 메서드는 연결된 비동기 상태가 동일한 packaged_task
개체에 대해 이미 호출된 경우 오류 코드가 future_already_retrieved
인 future_error
를 thorw합니다.
packaged_task::make_ready_at_thread_exit
연결된 비동기 상태에 저장되어 있는 호출 가능 개체를 호출하고 반환된 값을 원자 단위로 저장합니다.
void make_ready_at_thread_exit(ArgTypes... args);
설명
packaged_task
개체에 연결된 비동기 상태가 없는 경우 이 메서드는 오류 코드가 no_state
인 future_error를 throw합니다.
이 메서드 또는 make_ready_at_thread_exit가 동일한 연관 비동기 상태의 packaged_task
개체에 대해 이미 호출된 경우 이 메서드는 오류 코드가 promise_already_satisfied
인 future_error
를 throw합니다.
그렇지 않으면 이 연산자는 INVOKE(fn, args..., Ty)
를 호출합니다. 여기서 fn은 연결된 비동기 상태에 저장되어 있는 호출 가능 개체입니다. 반환된 모든 값은 연결된 비동기 상태에서 반환된 결과로 원자 단위로 저장됩니다.
packaged_task::operator()와 달리 연결된 비동기 상태는 호출 스레드의 모든 스레드 로컬 개체가 제거될 때까지 설정 ready
되지 않습니다. 일반적으로 연결된 비동기 상태에서 차단된 스레드는 호출 스레드가 종료될 때까지 차단 해제되지 않습니다.
packaged_task::operator=
지정된 개체에서 연결된 비동기 상태를 전송합니다.
packaged_task& operator=(packaged_task&& Right);
매개 변수
오른쪽
packaged_task
개체입니다.
Return Value
*this
설명
작업 후 Right 에는 더 이상 연결된 비동기 상태가 없습니다.
packaged_task::operator()
연결된 비동기 상태에 저장되어 있는 호출 가능 개체를 호출하고 반환된 값을 원자 단위로 저장한 후에 상태를 ready로 설정합니다.
void operator()(ArgTypes... args);
설명
packaged_task
개체에 연결된 비동기 상태가 없는 경우 이 메서드는 오류 코드가 no_state
인 future_error를 throw합니다.
이 메서드 또는 make_ready_at_thread_exit가 동일한 연관 비동기 상태의 packaged_task
개체에 대해 이미 호출된 경우 이 메서드는 오류 코드가 promise_already_satisfied
인 future_error
를 throw합니다.
그렇지 않으면 이 연산자는 INVOKE(fn, args..., Ty)
를 호출합니다. 여기서 fn은 연결된 비동기 상태에 저장되어 있는 호출 가능 개체입니다. 반환된 모든 값은 연결된 비동기 상태에서 반환된 결과로 원자 단위로 저장되며 상태는 ready로 설정됩니다. 그 결과로 연결된 비동기 상태에서 차단된 모든 스레드의 차단은 해제됩니다.
packaged_task::operator bool
개체에 associated asynchronous state
가 있는지를 지정합니다.
operator bool() const noexcept;
Return Value
개체가 연결된 비동기 상태이면 true
이고, 그렇지 않으면 false
입니다.
packaged_task::packaged_task 생성자
packaged_task
개체를 생성합니다.
packaged_task() noexcept;
packaged_task(packaged_task&& Right) noexcept;
template <class Fn>
explicit packaged_task(Fn&& fn);
template <class Fn, class Alloc>
explicit packaged_task(
allocator_arg_t, const Alloc& alloc, Fn&& fn);
매개 변수
오른쪽
packaged_task
개체입니다.
alloc
메모리 할당자입니다. 자세한 내용은 할당자를 참조 <하세요>.
fn(2018
함수 개체입니다.
설명
첫 번째 생성자는 연결된 비동기 상태가 없는 packaged_task
개체를 생성합니다.
두 번째 생성자는 개체를 packaged_task
생성하고 Right에서 연결된 비동기 상태를 전송합니다. 작업 후 Right 에는 더 이상 연결된 비동기 상태가 없습니다.
세 번째 생성자는 연결된 비동기 상태에 저장된 fn 복사본이 있는 개체를 생성 packaged_task
합니다.
네 번째 생성자는 연결된 비동기 상태에 저장된 fn 복사본이 있는 개체를 생성 packaged_task
하고 메모리 할당에 사용합니다alloc
.
packaged_task::~packaged_task 소멸자
packaged_task
개체를 제거합니다.
~packaged_task();
설명
연결된 비동기 상태가 준비되지 않은 경우 소멸자는 연결된 비동기 상태의 broken_promise
결과로 오류 코드가 있는 future_error 예외를 저장하고 연결된 비동기 상태에서 차단된 모든 스레드는 차단 해제됩니다.
packaged_task::reset
기존의 연결된 비동기 상태를 교체할 새 연결된 비동기 상태를 만듭니다.
void reset();
설명
실제로 이 메서드는 *this = packaged_task(move(fn))
를 실행합니다. 여기서 fn은 이 개체에 대한 연결된 비동기 상태에 저장되는 함수 개체입니다. 따라서 개체의 상태가 지워지고 get_future, 연산자(), make_ready_at_thread_exit 새로 생성된 개체에서처럼 호출할 수 있습니다.
packaged_task::swap
연결된 비동기 상태를 지정된 개체와 교환합니다.
void swap(packaged_task& Right) noexcept;
매개 변수
오른쪽
packaged_task
개체입니다.
packaged_task::valid
개체에 associated asynchronous state
가 있는지를 지정합니다.
bool valid() const;
Return Value
개체가 연결된 비동기 상태이면 true
이고, 그렇지 않으면 false
입니다.