자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey TAniThread 문제점
2012.10.29 00:52
XE2에서 컴퓨터를 장시간 켜놓게 되면 GetTick(Windows 에서는 timeGetTime) 의 값이 너무 커져 버려서
Single 유효 범위를 벗어나게 되면 값의 비교가 이상하게 되어서 애니메이션이 정상적으로 동작하지 않는 경우가
있었습니다.
XE3에서는 IFMXTimerService.GetTick은 Extended 로 구현되어 있지만..
실제로 해당 값을 사용하는 TAniThread 내에서
필드로 선언되어 있는 FTime, FDeltaTime과
OneStep 함수내의 NewTime 변수는 Single로 선언되어 있습니다.
이렇게 되면 Extended로 값을 받아와도 Single 타입 변수에 값을 넣고 나서 계산을 하게 되므로 XE2와 같은
문제가 발생할것으로 생각됩니다.
(single 타입의 유효자리수는 7-8자리로 알고 있습니다. http://docwiki.embarcadero.com/RADStudio/XE3/en/Simple_Types)
확인 부탁드립니다. 제가 잘못생각하고 있는 부분이 있다면 알려주시면 감사하겠습니다.
댓글 0
Firemonkey TAniThread 문제점
2012.10.29 00:52
XE2에서 컴퓨터를 장시간 켜놓게 되면 GetTick(Windows 에서는 timeGetTime) 의 값이 너무 커져 버려서
Single 유효 범위를 벗어나게 되면 값의 비교가 이상하게 되어서 애니메이션이 정상적으로 동작하지 않는 경우가
있었습니다.
XE3에서는 IFMXTimerService.GetTick은 Extended 로 구현되어 있지만..
실제로 해당 값을 사용하는 TAniThread 내에서
필드로 선언되어 있는 FTime, FDeltaTime과
OneStep 함수내의 NewTime 변수는 Single로 선언되어 있습니다.
이렇게 되면 Extended로 값을 받아와도 Single 타입 변수에 값을 넣고 나서 계산을 하게 되므로 XE2와 같은
문제가 발생할것으로 생각됩니다.
(single 타입의 유효자리수는 7-8자리로 알고 있습니다. http://docwiki.embarcadero.com/RADStudio/XE3/en/Simple_Types)
확인 부탁드립니다. 제가 잘못생각하고 있는 부분이 있다면 알려주시면 감사하겠습니다.