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