서버와 클라이언트 간의 시간동기화에 필요한 모듈을 구현하기 위해서 어떻게 요리할지 혼자만의 상상의 나래에 빠졌습니다.


먼저 가장 기본이 되는 것이 현재의 정확한 시간값을 얻는 것이었는데 떠오르는 API가 GetSystemTime, GetLocalTime 이었습니다.


윈도우 개발자에게 있어 가장 기본이 되는 함수들이죠. 그런데 SYSTEMTIME은 가장 섬세한 단위가 밀리초라 좀 더 섬세한 단위를 지원하는 FILETIME 이 떠오르더군요.


FILETIME은 100나노초까지 지원하기 때문에 SYSTEMTIME 보다 10000배(응?) 섬새하다고 할 수 있습니다.

그러나 위 API들처럼 바로 현재의 시간을 구할 수 있는 GetFileTime() 함수가 없더군요. 아.. 물론 GetFileTime() 함수는 있지만 현재의 시간을 구하는 함수가 아니라 특정 파일 핸들에 대해 해당 파일의 생성, 변경, 마지막 접근 등의 시간을 구하는 함수더군요.


그런데 갑자기 떠오르는 것이 GetSystemTime 으로 현재의 시간을 얻고 SystemTimeToFileTime 으로 FILETIME을 구하면 더 정밀한 마이크로초와 나노초의 단위에는 어떤 값들이 채워질까? 라는 생각이 떠올랐습니다.


그냥 생각에는 0으로 채워지지 않을까? 했습니다.


그런데 이게 왠걸 나름대로 일정한 값들이 채워지더군요.


지금까지 확인된 것은 대략 5분~10분 사이마다 4640, 7433, 48, 2752 등의 100나노 값들이 채워졌습니다.


없는 값을 어떻게 채울까..? 에 대한 답을 찾기 위해 조금 내려가 보니 결국 사용하는 함수는 RtlTimeFieldsToTime 이더군요.


그런데 소스를 볼 수가 없으니.. @.@


ReactOS 나 Wine 소스에는 해당 모듈에 마이크로초와 100나노초 단위의 값들에 대해서는 채우지는 않더라구요. -_-a


결국 또 미궁으로 빠졌습니다.


아무튼 현재 시간을 FILETIME 으로 가져오는 것은 GetSystemTimeAsFileTime 이라는 API가 있답니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기