std future 예제

실제로 std::future 개체는 나중에 할당될 값을 내부적으로 저장하며 get() 멤버 함수를 사용하여 해당 값에 액세스하는 메커니즘도 제공합니다. 그러나 누군가가 get() 함수를 통해 미래의 이 관련 값에 액세스하려고 하면 get() 함수는 값을 사용할 수 없을 때까지 차단합니다. 현재이 약속 개체에는 연결된 값이 없습니다. 그러나 누군가가 반드시 값을 설정하고 일단 설정하면 연결된 std::future 객체를 통해 해당 값을 얻을 수 있다는 약속을 제공합니다. 미래의 all_f(9호선)는 선물 공유_future1(6줄)과 future2(Zeile 7)를 모두 구성합니다. 모든 기초 선물이 준비되면 11호선의 미래 결과가 실행됩니다. 이 경우 12줄의 미래 all_f가 실행됩니다. 결과는 향후 결과를 사용할 수 있으며 14줄에서 사용할 수 있습니다. 한 가지 가능한 시나리오는 일반적인 시나리오인 여러 비동기 작업이 있는 경우입니다.

결과를 가능한 한 빨리 처리하려는 경우 미래에 결과를 여러 번 물어보고 싶다고 상상할 수 있습니다. 결과를 사용할 수 없는 경우 다른 작업을 수행하려고 할 수 있습니다. 다음은 가능한 구현입니다: 실제로 값을 반환하는 다른 예제를 시도해 보겠습니다. 더 흥미로운 것을 만들기 위해 이번에는 람다 (lambda)를 사용하려고합니다 : 함수의 출력은 한 쌍의 이터레이터 또는 임의의 수의 선물 (variadic template)이 사용되는지 여부에 따라 달라집니다. 두 함수 모두 미래를 반환합니다. 한 쌍의 이터레이터를 사용한 경우 std::vector: std::future<std::vector>에서 미래의 미래를 얻을 수 있습니다. 다양한 템플릿을 사용하는 경우 std::tuple: std::future<std:::tuple<미래,미래, 에서 미래의 미래를 얻을 수있습니다. to_string(f.get()))-호출(7줄)과 10번 줄의 f2.get()-call 간에는 미묘한 차이가 있습니다: 첫 번째 호출은 비차단 또는 비동기이며 두 번째 호출은 차단 또는 동기입니다. f2.get() – 미래 체인의 결과를 사용할 수 있게 될 때까지 호출대기가 제공됩니다. 이 문은 f1.then(…)과 같은 체인에도 유지됩니다. 그런 다음 (…). 그런 다음 (…).

그런 다음 (…) 확장 선물의 구성을 위해 보류되는 것처럼. 마지막 f2.get() 호출이 차단중입니다. 처음에는 매우 정교한 무언가에. 미래의 상태는 유효하거나 준비될 수 있습니다. 그런 다음 스레드 1은 std::pstd:future의 get 함수를 통해 스레드 2에 의해 설정된 값을 가져옵니다. 이 게시물의 대부분은 “std::future 및 Releated API”에 대한 제안에서입니다. 그것은 또한 내 예를 보유하고 있습니다. 이상한, 그들은 종종 res 미래의 결과를 얻기 위해 최종 get 호출을 사용하지 않았습니다.

따라서 res.get 호출 예제에 추가하고 결과를 변수 myResult에 저장했습니다. 또한 몇 가지 오타를 수정했습니다. 확장 선물이라는 이름은 설명하기가 매우 쉽습니다. 첫째, std::future의 인터페이스가 확장되었습니다. 둘째, 보상 할 수있는 특별한 선물을 만들기위한 새로운 기능이 있습니다.