2011-02-07 6 views
0

비디오 게임을 만들고 있는데 그래픽을 다루는 메인 스레드와 네트워킹 (동기 UDP 소켓)을 담당하는 별도의 작업자 스레드가 있습니다.스레드 종결의 순서, 즉 스레드 종속성을 지정할 수 있습니까?

문제는 게임을 닫을 때 "액세스 위반"오류가 발생하고 디버거가 몇 줄의 코드 중 하나를 가리킨다는 것입니다. 각 코드는 객체를 참조합니다. 은 이미이 있다고 믿습니다. 다른 스레드에서 파괴되었습니다.

비동기 스레드를 사용하고 있기 때문에 내 본능은 recv() 호출이 블로킹되는 동안 주 스레드가 거의 항상 먼저 죽게되고 마지막으로 recv()가 반환 될 때 모든 포인터가 현재 가짜 및 시각적으로 유지된다는 것입니다 스튜디오에서 오류를 던지기 시작합니다. 네트워킹 스레드가 완료 될 때까지

가 BTW 내가 부스트 스레드를 사용하고, 비주얼 스튜디오 2008과 C++

답변

3

공유 자원을 청소하기 전에 메인 스레드는 기다려야한다. Boost에서는 boost::thread::join() 함수가 트릭을 수행해야합니다.

boost::thread_interrupted도 반드시 처리하십시오!

(N.B. 이것은 일종의 일반적인 대답이며 특히 부스트 스레딩에 대한 경험이 없습니다.)