2017-04-26 9 views
1

메시지 처리 (및 창 만들기)가 보조 스레드에서 수행되는 동안 모든 렌더링이 기본 스레드에서 수행되는 다중 스레드 프로그램을 만들려고합니다. 초기화 함수에서 다음 코드 줄을 SwapChain->GetBuffer(0, __uuidof(ID3D10Texture2D), (void**)&back_buffer); 초기화 함수를 주 스레드에서 배치 될 때 액세스 위반 오류 (0xc0000005) 생성합니다.DirectX 10 IDXGISwapChain :: GetBuffer 다중 스레드 CTD 오류

보조 스레드에 초기화 기능을 넣지 않고이 오류를 해결하려면 어떻게해야합니까?

편집 : 관련 코드 here을 모두 게시했습니다.

Application.cpp의 라인 49에
+0

[Minimal, Complete, and Verifiable example] (https://stackoverflow.com/help/mcve) 또는 적어도 초기화 부분을 제공하지 않으면 정확히 무엇이 잘못되었는지 추측 할 수 없습니다. 별도의 렌더링 스레드를 사용하는 접근 방식이 효과적 일 수 있지만 선호되는 경우에도 가능한 교착 상태를 처리하고 DXGI 메서드에 대한 동시 호출을 방지하려면 세심한주의를 기울여야합니다. – VTT

+0

관련 코드가 모두 포함 된 GitHub 저장소에 대한 링크를 작성했습니다. –

+0

코드에 오류 처리가 없습니다. 모든 HRESULT 반환 값을 검사하고 DX 호출이 실제로 성공했는지 확인해야합니다. – VTT

답변

0

, while (HWindow != nullptr);HWindow에 기다리고 있던는nullptr을하게된다. 그러나 HWindow는 nullptr으로 초기화되므로 while 루프는 건너 뛰고 아직 생성되지 않은 창을 초기화하려고합니다.

이제 해당 줄은 while (HWindow == nullptr);입니다. 즉, 창을 만들 때까지 루프가 실행되므로 존재하지 않는 창 초기화가 차단됩니다.