2016-09-05 13 views

답변

0

task::is_done은 작업 완료 여부를 테스트하는 올바른 방법이지만 사용하지 않는 것이 좋습니다. is_done이 false를 반환하면 해당 사실에 대한 행동을 시작할 때까지 이미 작업이 완료되었을 수 있습니다. 이 함수는 프로그램의 속도를 늦출 수있는 약간의 동기화를 필요로한다는 것은 말할 것도없이 매우 정교합니다.

대신 연속을 연결하거나 co_await을 사용하십시오. 거기서 끝난 일을 처리하라.

+0

동기식 코드에서 비동기 API (XboxLive)를 사용하고 있습니다. 그에 대해서는 아무 것도 할 수 없습니다. 이것은 이전 작업이 새 작업을 시작하기 전에 완료되었는지 여부를 테스트하는 함수의 일부입니다. 기본적으로 concurrecy RT에 대한 지식이 없으므로 (비하면 제가 읽었습니다) 첫 번째 해결책은 비동기 작업이 시작되기 전에 변수를 설정하고 .then에서 변수를 false로 설정하는 것입니다. – Zingam

+0

@Zingam 나쁜 생각. 작업이 완료되면 요청하지 말고 이러한 작업을 연결하십시오. –

+0

어떻게하면됩니까? 나는 인터페이스 (가상 함수) getInfoAsync(), isAsyncComplete(), getRangeAsync()를 구현하고있다. 이 경우 비동기는 이러한 작업이 별도의 스레드에서 실행되고 있음을 의미합니다. 트리거 시스템에 의해 호출됩니다. 이러한 인터페이스는 이미 여러 다른 플랫폼 및 다른 API에 대해 구현됩니다. 어쨌든 나는 당신의 조언을 염두에 두겠다. – Zingam