<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
개체입니다.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기