2010-08-19 5 views
3

5 초마다 약간의 작업을하고 싶습니다. 내가 5 초마다 말할 때, 시스템 시계에 따라 00:00, 00:05, 00:10, 00:15, 00:20을 의미합니다. 타이머가 시작된 이후 5 초마다가 아닙니다.시스템 시계와 동기화 된 이벤트를 발생시키는 타이머

이미 이것을 할 수있는 .net 타이머가 있습니까? 찾을 수없는 타이머가 있습니까? 나는이 작업 방법을 생각할 수

...

  1. 는 매우 높은 해상도 타이머를 가지고 시스템 클럭 각 타이머 이벤트를 참조하십시오. 각 5 초가 지나면 곧 내 일을 해고하십시오.

  2. 매우 높은 해상도의 타이머를 사용하고 각 타이머 이벤트를 시스템 시계를 읽으십시오. 각 5 초가 지나면 즉시 5 초의 해상도를 가진 두 번째 타이머를 발사하십시오.

두 방법 중 하나에 만족하지 않습니다. 첫 번째 방법은 CPU에 불필요한로드를 둡니다 (해상도가 얼마나 높은지에 따라 다름). 두 번째 방법은 매우 오랜 시간이 지나면 표류 할 수 있습니다. 그것이 진실인지 아닌지 나는 모른다.

답변

1

직접적인 것은 아니지만, 다음 5 초에 하나의 짧은 타이머를 설정하여 해당 이벤트 처리기에서 5 초마다 일정을 설정할 수 있습니다.

1

모든 일반적인 타이머 (WinForms, 스레딩, 타이머)는 ~ 20ms의 해상도를 가지고 있습니다.

이 중 하나를 원샷 모드로 사용할 수 있으며 다음 5 초 지점에서 ms 단위로 시간을 다시 계산할 수 있습니다. 0..100 ms의 오류가 예상됩니다.

너무 많으면 고용 타이머가 필요하지만 시스템에 상당한 부하가 걸린다는 것을 알고 있어야합니다.

그러나 스레드/프로세스는 언제든지 N * 20ms 동안 스왑 아웃 될 수 있습니다.

+0

5 초마다 발생하는 이벤트가있는 타이머를 실행 한 경우 결국 시간이 흐르지 않습니까? 나는 스레딩 때문에 약간의 표류는 신경 쓰이지 않지만 프로세스가 다시 바뀌었을 때 그 프로세스가 바뀌면 오랫동안 괜찮습니다. – flobadob

관련 문제