취소가능성 설정 예제
이 항목에서는 사용자 지정 공급자 콜백에서 취소가능성을 설정하는 방법에 관한 예제를 제공합니다.
XAsyncRun으로 시작되는 기본 비동기 메서드는 취소할 수 없습니다. 취소가능성 지원은 사용자 지정 공급자를 사용하는 경우 수동으로 추가할 수 있습니다. 지원이 추가된 후에 XAsyncCancel이 Cancel
케이스를 트리거합니다.
// Provider callback.
[](XAsyncOp op, const XAsyncProviderData* providerData)
{
switch(op)
{
case XAsyncOp::DoWork:
{
bool canceled = false;
while (true)
{
DWORD waitResult = WaitForSingleObject(callData->cancelEvent, 0);
if (waitResult != WAIT_TIMEOUT)
{
canceled = true;
break;
}
// Continue doing normal work. Should break if completed.
}
if (canceled)
{
XAsyncComplete(providerData->async, E_ABORT, 0);
}
else
{
XAsyncComplete(providerData->async, S_OK, 0);
}
break;
}
case XAsyncOp::Cancel:
SetEvent(callData->cancelEvent);
break;
// Other cases.
}
}
공급자 사례에서는 Windows Event를 사용하여 취소가능성 지원이 추가됩니다.
Cancel
케이스가 호출되면 DoWork
케이스가 E_ABORT
상태에서 XAsyncComplete에 대한 호출로 종료됩니다. 취소를 알리는 데 모든 메서드를 사용할 수 있습니다. 그러나 이벤트는 타게팅할 수 있는 모든 Microsoft GDK(게임 개발 키트) 플랫폼에서 지원되는 취소를 알리는 간단한 방법입니다.
Cancel
케이스를 트리거하려면 작업에 대한 비동기 블록으로 XAsyncCancel
을(를) 호출합니다.
XAsyncCancel(async);