<future> 함수

async
future_category
make_error_code
make_error_condition
swap|

async

비동기 공급자를 나타냅니다.

template <class Fn, class... ArgTypes>
future<typename result_of<Fn(ArgTypes...)>::type>
    async(Fn&& fn, ArgTypes&&... args);

template <class Fn, class... ArgTypes>
future<typename result_of<Fn(ArgTypes...)>::type>
    async(launch policy, Fn&& fn, ArgTypes&&... args);

매개 변수

정책
launch 값입니다.

설명

약어의 정의:

약어 설명
dfn 호출하는 decay_copy(forward<Fn>(fn))의 결과입니다.
dargs decay_copy(forward<ArgsTypes>(args...)) 호출의 결과입니다.
Ty result_of<Fn(ArgTypes...)>::type 형식입니다.

첫 번째 템플릿 함수는 async(launch::any, fn, args...)를 반환합니다.

두 번째 함수는 연결된 비동기 상태가 값과 함께 dfn 결과를 보유하는 개체dargs 별도의 실행 스레드를 관리하는 스레드 개체를 반환 future<Ty> 합니다.

시작 이외의 형식이 아니면 decay<Fn>::type 두 번째 함수는 오버로드 확인에 참여하지 않습니다.

C++ 표준은 정책이 시작::async이면 함수가 새 스레드를 만든다고 명시합니다. 그러나 Microsoft 구현은 현재 비준수입니다. Windows ThreadPool에서 스레드를 가져오며, 경우에 따라 새 스레드가 아닌 재활용된 스레드를 제공할 수 있습니다. 즉, launch::async 정책이 .로 launch::async|launch::deferred구현됩니다. ThreadPool 기반 구현의 또 다른 의미는 스레드가 완료될 때 스레드 지역 변수가 제거된다는 보장이 없다는 것입니다. 스레드가 재활용되고 새 호출에 async제공된 경우 이전 변수는 계속 존재합니다. 와 함께 async스레드 지역 변수를 사용하지 않는 것이 좋습니다.

정책인 경우 함수는 launch::deferred연결된 비동기 상태를 지연된 함수를 보유하는 것으로 표시하고 반환합니다. 연결된 비동기 상태가 유효해지기를 기다리는 non-timed 함수의 첫 번째 호출은 INVOKE(dfn, dargs..., Ty)를 평가함으로써 지연된 함수를 호출합니다.

모든 경우에 개체의 future 연결된 비동기 상태는 예외를 throw하거나 정상적으로 반환하여 평가 INVOKE(dfn, dargs..., Ty) 가 완료될 때까지 준비되지 않습니다. 예외가 throw되거나 계산에서 값이 반환된 경우 연결된 비동기 상태의 결과는 예외입니다.

참고 항목

future시작된 작업에 연결된 마지막 또는 마지막 shared_future작업의 std::async경우 소멸자가 작업이 완료되지 않은 경우 차단합니다. 즉, 이 스레드가 아직 호출 .get() 되지 않았거나 .wait() 작업이 계속 실행 중이면 차단됩니다. future에서 가져온 std::async가 로컬 범위 밖으로 이동되는 경우 해당 future를 사용하는 다른 코드는 공유 상태 준비를 위해 소멸자가 차단될 것을 알고 있어야 합니다.

의사 함수 INVOKE 는 .에 정의되어 있습니다 <functional>.

Microsoft 전용

전달된 함수가 비동기적으로 실행되면 Windows 스레드 풀에서 실행됩니다. 스레드 풀을 참조 하세요. 동시 스레드 수는 스레드 풀 기본값(현재 500)으로 제한됩니다. 하드웨어에서 동시에 실행되는 스레드 수는 현재 프로세스 프로세서 그룹의 논리 프로세서 수로 제한되므로 사실상 64개로 제한됩니다. 프로세서 그룹을 참조하세요.

future_category

future 개체와 연결된 오류의 특징을 결정하는 error_category 개체에 대한 참조를 반환합니다.

const error_category& future_category() noexcept;

make_error_code

future 오류의 특징을 결정하는 error_category 개체와 함께 error_code를 만듭니다.

inline error_code make_error_code(future_errc Errno) noexcept;

매개 변수

Errno
보고된 오류를 식별하는 future_errc 값입니다.

Return Value

error_code(static_cast<int>(Errno), future_category());

make_error_condition

future 오류의 특정을 결정하는 error_category 개체와 함께 error_condition을 만듭니다.

inline error_condition make_error_condition(future_errc Errno) noexcept;

매개 변수

Errno
보고된 오류를 식별하는 future_errc 값입니다.

Return Value

error_condition(static_cast<int>(Errno), future_category());

swap

promise 개체 하나의 연결된 비동기 상태를 다른 개체의 상태와 교환합니다.

template <class Ty>
void swap(promise<Ty>& Left, promise<Ty>& Right) noexcept;

template <class Ty, class... ArgTypes>
void swap(packaged_task<Ty(ArgTypes...)>& Left, packaged_task<Ty(ArgTypes...)>& Right) noexcept;

매개 변수

Left
왼쪽 promise 개체입니다.

Right
오른쪽 promise 개체입니다.

참고 항목

<future>