2010-04-19 3 views
0

타이머 응용 프로그램을 사용하여 매 초마다 발사하는 타이머 이벤트를 사용할 계획입니다.AS3 : 타이머 이벤트를 실제 시간과 동기화 하시겠습니까?

내가 틀릴 수도 있지만 실제로 시스템 시간과 (아주 약간의) 동기화 문제가 있다고 가정합니다. 예를 들어, 실제 시스템 시간 밀리 초가 0 대신 500에있을 때 타이머 이벤트가 시작될 수 있습니다 (사용자가 원한다면 초가 부분적으로 '위상이 맞지 않음'을 의미).

타이머 이벤트를 실시간으로 동기화하거나 AS3에서 두 번째로 똑딱 거리면 시스템 시간 이벤트를 발생시키는 방법이 있습니까?

또한 1000 밀리 초마다 발사하도록 Timer를 설정하면 응용 프로그램로드에 따라 오프셋이 발생할 수 있습니까?

이들은 아마도 무시할만한 문제 일지 모르지만 나는 단지 궁금합니다.

감사합니다.

+0

시계의 경우 내부 Date 개체와 동기화 할 수 있습니다. – elias

답변

0

나는 방금 타이머의 정확성을 높이는 간단한 방법을 생각해 보았습니다. 단순히 타이머 간격을 줄이면 최대 오류 마진이 줄어 듭니다.

1000ms 대신 100ms마다 발사하도록 타이머를 설정하면 최대 오류는 999ms가 아닌 99ms가됩니다. 따라서 필요한 정확도/성능에 따라 이러한 값을 조정할 수 있습니다.

타이머 빈도를 1 초로 유지해야하는 경우 매우 빠른 간격 (~ 1ms)으로 실행되는 임시 초기화 타이머를 만들 수 있습니다. 그런 다음 각 틱에서 현재 시간과 이전 시간을 추적합니다. 시간의 초가 변경되면 (실제 시계가 변경된 경우) 그 순간에 주 타이머 (1000ms)를 발사 할 수 있습니다. 이렇게하면 실시간 초가 변경 될 때 1 초 타이머가 시작됩니다 (3 자리 밀리 초 대신 한 자리 밀리 초 단위의 오류가 있음)

물론 시간 변경이 있었을 때부터 약간의 지연이있을 것입니다 타이머가 시작될 때 감지됩니다. 그러나 Timer of 1을 유지하면서 정확도는 증가 할 수 있습니다.

나는 이번 주에 이것을 시험해보고 다시보고 할 것이다.

1

Date을 사용하면 현재 시간을 알 수 있습니다. 이 실제로 인 경우 Date가 반환하는 것과 정렬하여 타이머 지터를 제어하려고 할 수 있습니다. 나는 이것이 심지어 쟁점이 될 것이라는 것을 확신하지 못한다. (확실히, 당신의 어플리케이션이 오랜 기간 동안 실행되지 않는다면, 그리고 심지어 에러가 너무 빨리 생성 될 것이라는 확신이 없다.)

OS는 일반적으로 수 밀리 초 이내에 만 정확하므로 그런 종류의 정확성이 필요한 경우 다른 작업을 수행해야 할 수도 있습니다.

+0

맞습니다. 지터를 맞추는 것은 까다로울 수 있으며 오프셋의 미묘함을 고려할 때 가치가 없을 것입니다. – nebs

0

불행히도 저는 Timer가 같은 속도로 머무를 것이라고는 생각하지 않습니다. 일정 시간 동안 드리프트 할 가능성이 매우 큽니다 (예 : 1000ms로 설정하면 990ms마다 발사 될 수 있습니다. 아주 작은 차이이지만 시간이 지남에 따라 합산됩니다). 나는 당신이 말했던 것처럼해야한다고 생각합니다. 매 100ms마다 불을 끈 다음 Date 객체를 검사하여 1 초가 아직지나 갔는지 확인합니다.

관련 문제