2013-01-22 3 views
1

다음 질문은 유니티 게임 엔진에 대한 내용이지만 UI 스레드와 같이 주 스레드로 데이터를 보내려는 프로그램과 관련 될 수 있습니다.스레드 간 통신

일부 데이터는 별도의 스레드에서 처리 중입니다 (위치 데이터는 소켓과 비동기 적으로 읽음). 그러나, 나는이 데이터를 주 스레드에서 처리해야한다 (게임 개체의 변환은 주 스레드에서만 액세스 할 수있다). 내가 염두에두고있는 접근법은 스레드 안전 큐를 생성하고 생산자 - 소비자 패턴을 따르는 것입니다. 스레드는 위치 데이터를 대기열에 넣고 주 스레드는 데이터를 비우 고 처리합니다. * 참고 : Unity에서는 System.Windows.Threading 네임 스페이스에 액세스 할 수 없으므로 Dispatcher를 사용할 수 없습니다. 또한, .Net 3.5 필요하므로 Collections.Concurrent 네임 스페이스를 사용할 수 없습니다.

더 좋은 방법이 있습니까?

데이터가 대기 중일 때 주 스레드에 알리는 가장 좋은 방법은 무엇입니까? 설문 조사는 비효율적 인 것처럼 보이지만 주변에는 생각할 수 없습니다.

감사합니다.

+0

유니티 태그는 Microsoft Unity 용입니다. 오용하지 마십시오. –

답변

1

이것은 완전히 실용적인 스레딩 접근 방식입니다. 컴퓨터 하드웨어에서 폴링 대신 사용할 수있는 대안은 인터럽트 개념입니다.

멀티 스레드 고급 컴퓨터 프로그램에서 어떻게 인터럽트를 시뮬레이트하겠습니까? 말하기 어렵다 - UI 스레드가 끊임없이 점검하는 것이 아니라 변경된 스레드가 UI 스레드 "알았어."라고 알릴 필요가있다. 이것은 일종의 메시지 전달을 필요로하는데 실제로 가능하지 않을 수 있습니다.

일반적으로 게임 디자인 방식은 본질적으로 폴링하는 "게임 루프"입니다. 그 게임에는 아무런 부끄러움도 없습니다. 당신의 플레이를 죽이지 않는지 확인해야합니다.

0

this question이 답변을 드릴 수 있습니다.

그러나 대기열 폴링은 더 깨끗한 해결책 인 IMHO이며 인터넷에서 몇 가지 사례가 있습니다.