데이터베이스 가져 오기를 수행하는 Windows 서비스를 구현해야하며 한 달에 한 번 처리해야합니다. 프로그램은 전자 메일을 통해 데이터를 수신하고 매월 말에 데이터를 가져옵니다.해상도가 매우 낮은 타이머를 만드는 방법은 무엇입니까?
프로그램을 max_integer seconds/miliseconds 동안 반복적으로 sleep로 설정하는 것보다 나은 방법이 있습니까?
데이터베이스 가져 오기를 수행하는 Windows 서비스를 구현해야하며 한 달에 한 번 처리해야합니다. 프로그램은 전자 메일을 통해 데이터를 수신하고 매월 말에 데이터를 가져옵니다.해상도가 매우 낮은 타이머를 만드는 방법은 무엇입니까?
프로그램을 max_integer seconds/miliseconds 동안 반복적으로 sleep로 설정하는 것보다 나은 방법이 있습니까?
나는 윈도우 서비스로하지 않을 것이다. 나는 그것을 예정된 작업으로 실행할 것이다.
귀하의 서비스는 한 달 동안 잠 들어있을 뿐이며 자원 낭비 일뿐입니다. 운영 체제가 시간을 추적하고 한 달에 한 번 처리하도록 응용 프로그램을 시작하게하십시오.
윈도우 서비스 작성을 피할 수 있다면 인생을 더 편하게 할 수 있습니다. 예약 된 작업이 더 좋은 옵션 일 수 있습니다. Windows 서비스는 긴 시간 규모의 작업을 실행하는 것이 아니라 일정한 백그라운드 작업이 필요한 작업에 가장 적합합니다.
그러나이 서비스를 Windows 서비스로 설정해야한다면 에 긴 타이머 절전 시간 제한을 설정하지 않으려합니다. 그건 분명히 문제가되는 접근법입니다. 응용 프로그램을 다시 시작하면 어떻게됩니까? 얼마나 오래 자고 있었는지 어떻게 알 수 있습니까? 또는 스레드가 다시 시작되면 어떻게됩니까?
더 나은 방법은 다음 가져 오기가 언제 날짜/시간으로 발생해야하는지 식별하는 데이터베이스 어딘가에 레코드를 쓰는 것입니다. Windows 서비스는 주기적으로 (몇 분 또는 몇 시간마다) 깨어나 현재 날짜/시간이 해당 값보다 큰지 확인합니다. 그럴 경우 가져 오기를 실행하고 데이터베이스에서 다음 실행 날짜를 다음에 실행하도록 업데이트하십시오.
앱을 다시 시작한 경우 데이터베이스에서 값을 읽고 이전과 같이 계속 진행하면됩니다.
응용 프로그램을 다시 시작하면 어떻게됩니까? 레지스트리에서 마지막 검사 날짜 시간을 으로 읽으며 nowtime from registrytime> delta의 델타가> interval 인 경우 검사를 수행하면 현재 간격을 (interval- (nowtime-registrytime))으로 설정합니다. 물론 첫 번째 온 전성 검사 시계가 돌아 왔는지 여부. –
@ user155077 : 당신은 분명히 당신이 묘사하고있는 것을 할 수는 있지만 거기에는 위험이 있습니다. 레지스트리 대신이 정보의 저장 위치로 데이터베이스를 사용하려고합니다. 서버에 치명적인 오류가 발생하여 시스템을 재 구축해야한다면 어떻게됩니까? 레지스트리에서 정보를 잃을 가능성이 큽니다. 그것은 원격 가능성이 있습니다 -하지만 나는 그것이 일어나는 것을 보았습니다. 그리고 안타깝게도 시스템 레지스트리는 거의 백업되지 않습니다. – LBushkin
또한 환경에 따라 Windows 서비스가 레지스트리에 쓸 수 없다는 점을 언급 할 가치가 있습니다. 모든 것을 한 곳에서 보관하십시오. 데이터베이스 –
한 달에 한 번 일어날 서비스를 만드는 것이 좋습니까? 프로그램을 만들고 매월 실행하도록 예약하는 것이 더 좋지 않습니까? 예를 들어 Windows 기본 스케줄러 또는 nnCron (http://www.nncron.ru/)을 사용하여이 작업을 수행 할 수 있습니다. –
Windows XP, Vista 및 Windows 7에서 예약 된 작업으로 좋은 결과를 얻었습니다. –