|
1193 시간이 지난 이후 부터 m_dfDelayTime 값이 음수가 나온것 자체가 오버플로어 문제 입니다.
흐흠님, 지나가다님 답변이 맞아요. 간단한 문제 아닌가요.
이전 틱과 현재 틱을 비교할 때, 현재 틱값이 항상 이전 틱 값보다 크다는 조건이 만족된다면 상관 없겠지만
오버플로어로 인해서 그 반대가 되는 경우가 있다면, 그런 부분은 델타 값을 보정해서 처리해줘야 합니다.
김시환 님이 쓰신 글 :
: 논리적인 오류는 맞습니다. 다만 Overflow 의 문제는 아닙니다.
: 이경문님의 답변에서 힌트를 얻었습니다.
:
: GetTickCount 함수는 어차피 Overflow 가 되면 0으로 초기화 시키고, 아래 변수들 중에서 m_dfDelayTime 은 제가 일부러 double 로 선언했기 때문에 Overflow는 발생하지 않습니다.
:
: 문제는 1193시간이 지난후부터 m_dfDelayTime 값이 계속 음수가 나오기 때문에 if(m_dfDelayTime > 10) 문이 참이 될수 없다는 것이네요.. 결국 m_dfDelayTime 이 음수가 되면 m_dfStartTime 변수를 다시 갱신해 주는 코드가 한줄 필요하네요...
:
: 답변해 주신분들 감사합니다. 이래서 토론이 좋은것인가 봅니다. 머리싸매고 토론하다 보면 좋은 결론이 나오네요..
:
:
:
: while(!Terminated)
: {
: m_dfDelayTime = (GetTickCount() / 1000.0) - m_dfStartTime ;
:
: if( m_dfDelayTime < 0) m_dfStartTime = GetTickCount() / 1000.0 ; <-- 한줄추가..
:
: if(m_dfDelayTime > 10) // 10초에 한번씩 시스템데이타를 읽어 온다.
: {
: Data_Read() ;
:
: m_dfStartTime = GetTickCount() / 1000.0 ;
: }
:
: if(user_stop == true) this->Terminate() ;
:
: if( g_dfTestTime <= 0) Sample_Test()
: }
:
:
|