winapi GetTickCount()랑 같은 역할을 하는 함수가..
글쓴이: emeraldrhapsody / 작성시간: 월, 2014/08/04 - 8:45오전
#ifndef WIN32 unsigned int GetTickCount() { struct timeval gettick; unsigned int tick; gettimeofday(&gettick, NULL); tick = gettick.tv_sec*1000 + gettick.tv_usec/1000; return tick; } #endif
구글링해보면 대부분 이런식으로 구현이 되어있는데요.
sec * 1000값이 표현가능한 수의 크기를 넘어서는지 음수값으로 나오는데요.
이게 맞는 방법인가요?
Forums:
unsigned 인데 음수값이?
부호가없는 자료형에서 음수가나오진않죠
그래도 크기가 부족해서생겼다고 여겨지신다면
long long형을 사용해보시는건어떤지요
정확한 구현은 아닌 것 같네요.
Win32 GetTickCount()는 시스템 시작 시간부터 카운트를 하는데, gettimeofday는 1970년 1월 1일부터 카운트를 하는군요.
일단 저 함수를 시스템 시작 시간으로부터 현재시각을 재는 용도보단 단순히 시간차를 계산하는 용도로 사용되는 경우가 많으니, static 등을 사용해 처음 함수가 불려졌을 때를 기준으로 해서 그로부터의 차이만 계산하는 형태로 바꾸면, 윈도에서는 잘되는데 그 외의 플랫폼에서 문제가 되는 경우는 줄어들 겁니다. 더 비슷하게 동작하게 만드려면 똑같이 시스템 시작 시간부터 카운트하는 함수를 이용해야 겠지요. WINE의 소스코드를 찾아보시면 좀 더 도움이 될듯 합니다.
--
http://sunyzero.tistory.com/1
http://sunyzero.tistory.com/161
gettimeofday() 보다는 clock_gettime()을 써보세요. 위 링크에는 안나와 있지만, clock_id로 CLOCK_BOOTTIME을 쓰면 GetTickCount() 처럼 부트타임부터의 값을 돌려준다고 manpage에 나와있군요.
답변 감사합니다
.
댓글 달기