Page 22 -
P. 22

bool isStillLoading; // 전역 변수

               Thread1
               {
                   isStillLoading = true;
                   while (isStillLoading)
                   {
                       FrameMove();
                       Render();
                   }
               }


               Thread2
               {
                   LoadScene();
                   LoadModel();
                   LoadTexture();
                   LoadAnimation();
                   LoadSound();

                   isStillLoading = false;
               }

               Thread1에서는 게임 루프를 돕니다. 즉, 렌더링을 지속적으로 수행합니다.

               Thread2에서는 게임에 필요한 데이터를 디스크에서 로딩합니다. 그리고 로딩이 끝나면 특정 변수
               를 변경합니다. Thread1에서는 이 변수가 변경될 때까지 로딩 화면을 반복해서 렌더링합니다.

               이렇게 하면 동시에 두 가지 일을 하기 때문에 로딩이 진행되는 동안 제법 부드러운 애니메이션을
               선사할 수 있습니다.

               멀티스레드 프로그래밍이 유용한 다음 케이스를 봅시다.




               1.3.2  어떤 긴 처리를 진행하는 동안 다른 짧은 일을 처리해야 할 때


               게임 서버 개발에서도 이 경우가 필요할 때가 있습니다. 플레이어 정보를 읽거나 쓰려고 디스크를
               액세스하는 경우입니다. 디스크를 액세스하는 스레드는 디스크의 처리 결과가 끝날 때까지 기다
                                                *
               려야 하는데, 이 시간 동안 CPU는 놉니다.  이 노는 시간을 다른 플레이어에게 분배하면 서버의


               *     뒤에서 설명하겠지만, 대부분 게임에서는 서버 기기 자체가 가진 파일에 플레이어 정보를 저장하지 않습니다. 그 대신 다른 기기에 있는 데이
                  터베이스에 정보를 저장합니다.

         030
   17   18   19   20   21   22   23   24   25   26   27