2013-05-27 7 views
0

나는 멀티 스레드 프로그램에서 동적 청크 관리 시스템을 만들려고 애 쓰고있는 것 같다. Voxel 청크로 채워지는 클래스 인 VDimensia 클래스가 있고 다중 스레드 프로그램의 한 스레드는 복셀을 렌더링하고 업데이트하는 중입니다. 내 문제는 다른 스레드가 너무 멀리 떨어져있는 voxel 청크를 없애기 위해 설계되었으며 다른 스레드가 청크를 생성하고 초기화하는 도중에 청크를 삭제할 때 문제가 발생한다는 것입니다. 지금은 코드가 좀 어수선하다. 내가 가진 모든 액세스 검사로 어떤 일이 벌어 지지만, 어떤 종류의 액세스 위반으로 프로그램이 계속 실행되는 것을 막을 수는없는 것 같다. 시도를 사용하여 위반 사항을 무시하고 계속할 수있는 방법이 있습니까? 이미 __try __except를 사용하려고 시도했지만 스레드를 잠그기로 결정하고 컴파일러 옵션/EHa를 설정하려고 시도했지만 문자 그대로는 아무 것도하지 않습니다. Visual Studio 2012 C++를 사용하고 있습니다. 나는 아직도 C++을 배우고 있기 때문에 어떤 도움을 주시면 감사하겠습니다.하나의 스레드가 voxel 게임 청크를 렌더링하거나 관리합니다. 다른 사람이 방금 삭제했습니다. 액세스 위반?

답변

0

std :: shared_ptr/std :: weak_ptr과 같은 참조 계산 솔루션을 살펴보고 복셀을 업데이트하는 스레드가 해당 작업을 수행하도록 할 수 있습니다. 그들이 완료되고 복셀을 deref하면, 복셀은 사라질 수 있습니다.

http://en.cppreference.com/w/cpp/memory/shared_ptr

+0

감사합니다. 그게 바로 제가 찾고 있던 것이 었습니다! – Killamanjara