none
안녕하세요. vs2013(RC) C++ CoreDispatcher.ProcessEvents 에러 관련 문의드립니다. RRS feed

  • 질문

  • 기존 vs2012로 c++ 스토어 앱 프로젝트를 진행 중에 있습니다.

    일단 c++에서는 c#에서처럼 await 함수를 지원하지 않아 따로 c++용으로 await 함수를 구현하여 사용하는데,

    이번 vs2013(RC) 버전으로 프로젝트를 마이그레이션 중 다음과 같은 error가 발생하여 문의를 드리게 됐습니다.

    구현한 await 내부에서 다음과 같은 에러가 발생하는데요.

    while (waitResult != WAIT_OBJECT_0)
    {
        dispatcher->ProcessEvents(Windows::UI::Core::CoreProcessEventsOption::ProcessAllIfPresent); <--error
        waitResult = WaitForSingleObjectEx(hEvent, 0, TRUE);
    }

    Error :

    Microsoft C++ exception: Platform::COMException ^ at memory location 0x02C2D4F8. HRESULT:0x8000FFFF 오류입니다.

    WinRT 정보: Nested calls to ProcessEvents method is not allowed.

    해당 관련하여 유사한 문제도 찾아보았지만 근본적인 해결책을 잘 모르겠네요. 저희는 부득이 하게 비동기 함수를 람다보다는 저희가

    구현한 await로 써야해서요.

    그럼 답변 부탁드리겠으며, 수고하세요.

    2013년 9월 30일 월요일 오전 8:27

모든 응답

  • 비동기 호출을 하는데 있어서 체인을 활용하지 않고 다른 방법으로 임의 구현하는 것은 권장하지 않는 방법인데요, 일단 저 코드가 어느 쓰레드에서 어떻게 구성되어있는지 구조를 알아야 문제를 회피하는 방법을 고민해볼 수 있을 것 같습니다. 호출하는 흐름을 알려주시면 고민하는데 도움이 될 것 같습니다.

    그런데 VS2012에서 개발하셨을 때는 정상적으로 작동했었는지 모르겠습니다만, 정상적으로 빌드되어 돌아갔다고 하더라도 잠재적인 오류의 가능성이 없었는지는 의문입니다.

    혹시 계획하고 계시는 타깃이 Windows 8.1이라면 위의 프로젝트를 Windows 8 타깃으로 빌드하고 Windows 8.1에서 테스트를 하여도 동일하게 문제가 발생하는지 확인해보세요. 문제가 발생한다면 더 이상 WinRT에서 위와 같은 구현을 명시적으로 허용하지 않는다는 의미가 됩니다.

    2013년 10월 11일 금요일 오전 9:48