게임을 개발하는 중이고 멀티 스레딩 문제를 발견했습니다. 리소스를로드 할 때 이미 멀티 스레딩을 성공적으로 사용했습니다. 어느 시점에서 일부 스레드를 생성하고, 함수를 할당하고, 로딩 화면을 그릴 때 끝날 때까지 기다렸습니다.게임 루프에서 스레드 관리?
이제 함수를받을 때까지 유휴 상태가 될 때까지 기다릴 수있는 스레드를 만들고 싶습니다. 그들은 대략 다음과 같이하는 게임 루프에서 작동해야합니다 (난 그냥 쉽게 시각화를위한 이러한 함수 이름 해낸) :
std::thread t0,t1;
while(gamerunning)
{
UpdateGame();
t0.receiveFunc(RenderShadow);
t1.receiveFunc(RenderScene);
WaitForThreadstoFinishWork();
RenderEverything(); //Only draw everything if the threads finished (D3D11's Deferred Context rendering)
}
t0.Destroy();
t1.Destroy();
내 렌더링 엔진 (테스트) 작업, 당분간되고, 내 게임 루프에 스레드를 만들었는데, 이는 렌더링 속도가 느려지 기 때문에 빠른 테스트조차도 끔찍한 방법입니다. 그건 그렇고, 나는 C++ 11의 라이브러리를 사용하고있다.
간단히 말하자면 게임 루프가 시작되기 전에 스레드를 만들고 나중에 게임 루프에서 스레드를 사용하여 누군가가 나를 도울 수 있기를 바랍니다. 옵션이라면 저수준의 스레딩에서 벗어나고 싶습니다.이 작업을 수행하는 가장 간단한 방법이 필요합니다.
그래서, 당신은 임의의 작업을 받아 들일 수 작업자 스레드 풀을 원하는 (기능) 할 수 처형 됐지? 필요한만큼 많은 스레드와 함께 함수 ('queue> + 뮤텍스 + condition_variable' 또는 이와 비슷한 것)를 취하는 thread-safe 메시지 큐를 사용하십시오 (일반적으로 시스템의 CPU 코어의 두 배입니다. CPU를 포화시키고 자 함). –
syam
그러나 실제로는 메시지 대기열에 대한 귀하의 의견 중 두 번째 절반을 얻지는 못하지만 스레드 풀로 올바른 방향으로 설정했다고 생각합니다. 나는 그것을 들여다보고 돌아올 것이다. :) –
이것은 매우 일반적인 패턴이므로 온라인에서 찾기가 너무 어려워서는 안됩니다. 그러나 당신에게 정확하게 설명하고 싶다면 그것은 많은 시간을 필요로 할 것입니다. 그래서 나는 단지 당신에게 힌트를주었습니다. ;) 정말로 알아낼 수 없다면, 여기에 ping을하면됩니다 (@ am 코멘트 추가). 제가 할 수있는 것을 보게 될 것입니다. :) – syam