2010-04-06 5 views
5

데이터베이스 쿼리를 60 초마다 (또는 구성 파일에 설정된 간격으로) 실행해야하는 C# Windows 서비스가 있습니다. 나는 이것을 달성하기 위해 while 루프에서 Thread.sleep (60)을 사용하고있다. 이 작업을 수행하는 더 좋은 방법이 있습니까?Windows 서비스가 기다려야합니다. Thread.Sleep?

감사

+0

쿼리가 실행되는 스레드를 신경 써야합니까? – Gabe

+0

nope. 나는 단지 내가 어떤 문제에도 부딪치지 않을 것이라고 확신하고 싶다 ... 타이머가 훨씬 더 잘 작동 할 것처럼 보인다. 루핑이 필요하지 않습니다. –

답변

8

당신은 잠자는 스레드에서 그 일의 60 초마다 대신 코드를 실행하기 위해 System.Threading.Timer를 사용할 수 있습니다.

+1

물론 코드가 60 초 이상 실행되면 로그 파일 액세스와 같은 멀티 스레딩 문제가 발생합니다. 나는 그것을하는 것을 추천하지 않을 것이다. –

4

을 사용하면 프로세스를 강제 종료하지 않고 60 초마다 처리 할 수 ​​있습니다.

5

당신이하고 싶은 일에 달려 있습니다. 정확한 방법을 원한다면 System.Threading.Timer을 사용할 수 있습니다. thread.sleep에 관한 한 가지 사실은 "sleepatleastuntil ..."입니다. 프로세서는 수면 시간이 지날 때까지 스레드를 무시합니다. 잠자기 시간이 지나면 다음에 스레드 우선 순위가 부여됩니다.

일반적으로 원하는 간격에 매우 가깝지만 길어질 수 있습니다. 당신이 정말로 양보하고자하지 않는 한 양보하지 마십시오.

관련 문제