2016-09-29 3 views
-1

좋아요, 그렇기 때문에이 작업을 수행하기가 정말 쉽다는 느낌이 들었습니다. 실제로 이와 같은 작업은 다른 언어에서도 쉽게 수행 할 수 있습니다. 오직 나의 C++이 나의 가장 강한 언어가 아니기 때문에, 나는 이것이 어떻게 이루어져야 하는지를 아주 잘 이해할 수 없다.비동기 코드 섹션을 C++ 함수에 삽입

일부 시작 작업을 수행하는 기능이 있으며 일부 방법을 통해 일부 I/O를 수행하고 다른 프로세스에서 데이터를 가져와야합니다. 단지, 여기 파트 1 일 2 행동 사이의 논리적 분리가 없기 때문에

startupPt1() { 
/* stuff */ 
ioCall(startupPt2()); 
} 

startupPt2() { 
/* rest of stuff */ 
} 

정말 내가이 문제를 방지하려면 : 당연히 나는 콜백이 작업을 수행 할 수 있지만, 나는이 일을 피하려고 우리가 그들 사이에 비동기 적으로 발생시키고 자하는 I/O가 있다는 것을 의미합니다.

저는 현재 콜백을 위와 같이 사용하고 있지만 그 외에는 무엇을해야할지 모르겠습니다. 이 OS는 당신을 위해 IO 작업을 예약 할 수 있습니다

#include<future> 

//... 

void startup() { 
    // part 1 
    auto result = std::async([](){ 
     // IO part 
    }); 
    // part 2 not relying on the result of IO 
    // part 2 that uses IO result as result.get() 
} 

: OK

+0

이미 시도 했습니까? _ "어떤 아이디어?"를 묻는 것은 너무 광범위하게 들리므로 여기에서 질문하십시오. 이것은 우리가 여기서 원하지 않는 끝없는 토론으로 바뀔 수 있습니다. 이 사이트는 오히려 질의 응답 쌍과 같은 간결한 FAQ에 관한 것입니다. 또한 [여기] (http://stackoverflow.com/help/asking)을 읽으십시오. –

+1

[std :: async] (http://en.cppreference.com/w/cpp/thread/async)는 어떻습니까? – Gasper

+0

* "당연히 콜백으로이 작업을 수행 할 수 있습니다"* C++에서 콜백을 사용할 수 있습니다. 'std :: function'을 보자. –

답변

2

, 그냥 내 의견을 정교하게, 당신은 이런 식으로 뭔가를 할 수 있습니다. 보장 할 수있는 유일한 시간은 results.get()을 호출 한 후에입니다.

+0

이것은 내가 원하는 것입니다. 나는 당신이 무엇을보고 있는지 이해하지 못했지만, 코드 스 니펫 (snippet)은 매우 명확합니다. 고맙습니다! – Bronze

관련 문제