개요.. |
서버 프로그램 및 안정성 높은 프로그램 개발할 경우 timeGetTime() 함수 사용방법에 대한 주의 사항을 알려드립니다.
근본적으로 timeGetTime() 함수는 milliseconds 단위로 DWORD 자료형을 리턴하는 함수입니다. 하지만 자료형의 한계 및 함수 특성상 컴퓨터가 켜진 이후 49.71일 이 경과되면 다시 0으로 초기화 되는 현상이 발생됩니다.
따라서 서버 프로그램과 같이 장시간 서비스가 되는 소프트웨어를 개발할 경우에는 가급적 timeGetTime() 함수를 사용하지 않거나 변수 오버플로우를 처리해야 합니다.
(개인적으로는 1초 단위를 리턴하는 time() 함수를 많이 사용합니다.)
안정성이 생명인 게임 서버 프로그램의 모습
오류를 제어하지 않는 코드의 예 |
DWORD dwCurrentTime = timeGetTime();
DWORD dwDiff = dwCurrentTime - m_dwStart; // dwDiff 값은 경우에 따라서 음수 ( - ) 가 되거나 DWORD 자료형을 초과할 수 있다
// 49.71일처리... if( dwCurrentTime < m_dwStart ) { return 0; } |
오류를 제어한 코드의 예 |
DWORD dwCurrentTime = timeGetTime();
DWORD dwDiff = dwCurrentTime - m_dwStart; // dwDiff 값은 경우에 따라서 음수 ( - ) 가 되거나 DWORD 자료형을 초과할 수 있다
// 49.71일처리... if( dwCurrentTime < m_dwStart ) { // 오버 플로우된 변수값을 적절히 처리한다. m_dwStart = 0; dwDiff = 0; } |