2016-06-15 2 views
4

이것이 작동하지 않는 이유를 이해할 수 없습니다. 나는 끝없이 수색을 해왔고 아래의 예제가 비동기 작업을 시작하지 않는 것을 보지 못했습니다.Windows C++ 응용 프로그램에서 비동기 작동을 시도 중

void Folder::NewFileAction() 
{ 
    if (Folder::Match) 
    { 
     LOG(LOG_INFO) << "New file detected. Compressing"; 
     auto Compress = async(launch::async, &ZipFile, Folder::FilePath); 
    } 
} 

다른 스레드에서 비동기 작업을 시작하지 않아야합니까? Visual Studio 2015에서 활성화해야하는 플래그가 있습니까?

+4

어떻게 비동기 작업을 시작하지 않는다고 판단 했습니까? – juanchopanza

+0

NewFileAction()을 호출하는 메서드에서 계속 실행을 차단합니다. 동시에 여러 개의 파일이 제공되지만 압축이 완료 될 때까지 처리되지 않습니다. – user0000001

+4

'압축'이 범위를 벗어나기 때문일 수 있습니다. 'std :: future'에 대한 문서를 읽으십시오. – juanchopanza

답변

7

std::asyncstd::future 객체를 반환 감사드립니다. Compress은 로컬 객체 (유형이 std::future)이므로 범위를 벗어납니다. 이 객체는 반환 결과가 async 인 객체이기 때문에 소멸자는 계속 대기합니다. 이 물체를이 클래스의 구성원으로 유지해야합니다 (vector<future> 일 수 있음).

+0

그래서 벡터를 사용하여 객체를 추적하고 클래스 자체의 구성원으로 추가해야합니까? – user0000001

+0

당신은 방금 내 질문에 대답했습니다. 설명해 주셔서 감사합니다 ... – user0000001

관련 문제