2017-04-04 1 views
0

24 시간마다 기능을 호출하는 타이머가 있습니다. 이 함수는 파일을 읽어 남아있는 일 수를 얻고, 1 씩 줄이고 새로운 남은 요일을 같은 파일에 다시 씁니다.재부팅시 남은 일 처리를위한 논리

문제점 : 시스템이 재부팅되면 타이머 (24 시간 표시로 트리거되기 위해 대기 중임)가 실행되지 않고 파일에 기록되지 않습니다. 예를 들어 재부팅이 24 시간 이전의 매일 발생하면 나머지 일수는 결코 감소하지 않습니다.

Linux 시스템에서 C++ 프로그램을 사용하고 있습니다.

이 문제를 처리하는 데 필요한 논리는 무엇입니까?

+2

남은 일 (세 전까지)을 계산해야하는 이유는 무엇입니까? 그냥 데이트 X를 보관할 수 없니? –

+0

@AndreyTurkin 다른 이벤트가 발생할 때까지의 일 수를 추적합니다. 'X'일이 지나기 전에는 이벤트가 발생하지 않아야합니다. 이 'X'일은 파일로 초기화됩니다. –

+0

@AndreyTurkin에 동의합니다. 종료일을 저장하고이를 기반으로 나머지 일수를 계산하면보다 강력한 시스템이되고이 문제는 피할 수 있습니다. – vu1p3n0x

답변

0

IMHO, 가장 좋은 방법은 다른 이벤트의 마지막 발생 날짜를 저장하고 매일 기능에서 각각을 비교하는 것입니다. 또는 새 날짜 (이전 날짜 + X 일)를 직접 저장하고 직접 테스트하십시오. 이렇게하면 재부팅에 면역이됩니다. 부팅 할 때도 테스트하면됩니다.

나머지 일 수를 계속 처리해야하는 경우 파일의 마지막 수정 시간을 확인할 수 있습니다. 제거 할 일 수에 대한 좋은 힌트는 (last_time - current_time + 12 시간)/24 시간의 값입니다. 몇 시간 안에 활성화 및 심지어 여러 번 정품 인증하지 않아도 며칠을 받아 들여야합니다. 그러나 중요한 사건 발생 후 복원을 포함하여 해당 파일의 수동 작업에 매우 신중해야하며 파일의 내용이 수정 시간과 일치해야합니다. 드래곤들이 그곳에있다 ...

+0

두 번째 단락은 내가 취해야 할 방식 인 것 같습니다. 하지만 시스템 시간이 수정되면 제대로 작동합니까? –

+0

@nitin_cherian : DST를 잘 관리해야한다면 시스템 시간이 조정 된 것입니다. 심지어 1 시간이라도 몇 분이 걸릴 수도 있습니다. 그러나 오류가 있고 시스템 시간이 며칠 또는 몇 년이 지나면 아무 일도 일어나지 않을 수 있습니다. 보안 수단으로 delta가 5 또는 10 일보다 큰 경우 함수가 오류 메시지와 함께 중단되고 1 일과 다른 경우 경고를 기록해야합니다. –

+1

문맥을 모른 채 "보안"조언을하는 것은 위험합니다. 우리는 OP가 핵 폐기물 저장소 나 의료 장비 코드를 작성하지 않는다고 추측 할 수 없습니다. "오류 메시지와 함께 중단"은 항상 확실한 오류 방지 옵션이 아닙니다. – sehe

관련 문제