내 프로그램이 올바르게 종료되지 않으면 시스템이 불안정 해집니다. 실제로 해결 방법은 없습니다. 그래서, 내 프로그램이 충돌하고 올바르게 찢어지지 않으면, 사용자에게 시스템을 다시 실행하려고 할 때 시스템이 불안정한 상태로 남았음을 알릴 필요가있다. 이 작업을 수행하는 올바른 방법은 올바르게 종료 할 때 잠금 파일을 시작하고 삭제할 때 잠금 파일을 만드는 것입니다. 파일이 존재하고 그 파일이 존재하면 이전에 충돌이 발생한다는 것을 알았습니다. 이것이 올바른 접근 방법입니까?내 프로그램이 마지막으로 실행될 때 프로그램이 충돌했는지 어떻게 알 수 있습니까?
3
A
답변
5
두 가지 :
- Application Recovery and Restart API 비스타와 Win7에 사용할 수 있습니다. OS가 사용자에게 알릴 복구 기능을 지정할 수 있습니다. 사용자에게 알림이 전송됩니다.
- unhandled exception filter을 만들면 다른 곳에서 충돌이 발생하는 경우 실제로 복구를 수행 할 수 있습니다. 이것은 XP에서도 작동합니다. 필자는이 기술을 사용하여 이전에 올바르게 닫히지 않은 경우 응답하지 않는 드라이버를 닫습니다.
0
계정을 고려하면 앱과는 별도로 잠금 파일이 삭제되지 않을 수 있습니다 (예 : .e.g). 네트워크 오류, 파일 시스템 오류, o.s 오류.
요구 사항에 따라 현재 상태가 유효한지 여부를 확인하는 것이 절대적으로 중요 할 경우 잠금 파일에만 의존하지 않고 모든 종속 변수 및 상태를 검사하여 유효성을 확인해야합니다. 그렇지 않으면 종료 상태를 모니터링하는 쉬운 방법이 될 수 있습니다. 미사일을 다시 발사해야할지 여부를 결정하기 위해 의뢰하지 마십시오. 유용 할 수 있습니다
1
프로그램이 충돌하여 컴퓨터가 재부팅 된 경우에도 여전히 불안정한 상태가 발생합니까? 그렇지 않으면 재부팅 후에도 파일이 남아 있기 때문에 잠금 파일은 수행하려는 방식이 아닙니다. global atom table을 사용하여 해결책을 시도하십시오.
// Test if the application has crashed since the last reboot
ATOM myAtom = GlobalFindAtom ("MySecretName");
if (myAtom != 0)
{
// We crashed on last run, inform user and exit
// ...
exit (0);
}
// Create a global atom which will be destroyed only on clean termination
myAtom = GlobalAddAtom ("MySecretName");
// Run your main program here
// ...
// Clean termination, delete the atom
GlobalDeleteAtom (myAtom);
0
Microsoft Word (PPT/Excel도 마찬가지)는 유사한 접근 방식을 따릅니다. 숨겨진 파일은 문서가 쓰기 모드로 열리면 작성되며 응용 프로그램이 정상적으로 종료되면 바로 삭제됩니다. 파일에는 'x'분 등 자동 저장 문서와 같은 정보가 더 많을 수 있지만 요점은 유효합니다 :-)
관련 문제
- 1. 내 응용 프로그램이 실행될 때 해쉬를 결정합니까?
- 2. 내 응용 프로그램이 작동 모드가 아닌지 어떻게 알 수 있습니까?
- 3. 프로그램이 무엇을하는지 어떻게 알 수 있습니까?
- 4. 마지막으로 포커스가있는 TextBox를 어떻게 알 수 있습니까?
- 5. 내 프로그램이 정상적으로 종료되었는지 어떻게 알 수 있습니까?
- 6. 프로그램이 하위 프로세스와 충돌했는지 확인하는 방법은 무엇입니까?
- 7. 응용 프로그램이 실행될 때 UIImageView가 변경됩니다.
- 8. 장비 응용 프로그램이 언제 표시되는지 어떻게 알 수 있습니까?
- 9. Facebook 응용 프로그램이 제거 된시기를 어떻게 알 수 있습니까?
- 10. tomcat 웹 응용 프로그램이 언제 중단되었는지 어떻게 알 수 있습니까?
- 11. Xcode는 응용 프로그램이 속한 프로필을 어떻게 알 수 있습니까?
- 12. 버스 오류 - 프로그램이 어디에서 죽었는지 어떻게 알 수 있습니까?
- 13. 어떤 프로그램이 오류 코드를 반환했는지 어떻게 알 수 있습니까?
- 14. 프로그램이 신호를 통해 실행을 종료했는지 어떻게 알 수 있습니까?
- 15. Win32 응용 프로그램이 .NET 런타임을 사용하는지 어떻게 알 수 있습니까?
- 16. 프로그램이 다른 프로세스가 서비스로 실행 중인지 어떻게 알 수 있습니까?
- 17. 응용 프로그램이 문서 기반인지 어떻게 알 수 있습니까?
- 18. 시리얼 콘솔 관점에서 프로그램이 종료되었음을 어떻게 알 수 있습니까?
- 19. 내 프로그램이 "게시"되었습니다. 어떻게 설치 경로를 변경할 수 있습니까?
- 20. .Net 응용 프로그램이 정상적으로 실행될 때 예약이 끊어짐
- 21. 은 어떻게 프로그램이 현재 내 앞의 질문에
- 22. 이클립스 외부에서 실행될 때 프로그램이 완전히 작동하지 않습니다.
- 23. 내 ASP.Net MVC 응용 프로그램이 어떤 사용자로 실행되고 있는지 어떻게 알 수 있습니까?
- 24. 내 응용 프로그램이 iframe 창이나 PHP 코드의 일반 브라우저 창에서 실행되는지 여부를 어떻게 알 수 있습니까?
- 25. 내 dev 환경과 응용 프로그램이 JRuby의 Ruby인지 어떻게 알 수 있습니까?
- 26. 응용 프로그램이 백그라운드에서 실행될 때 위치 정보를 얻는 방법은 무엇입니까?
- 27. 왜 내 프로그램이 실패하나요?
- 28. 내 스레드 구현을 사용할 때 프로그램이 실패합니까?
- 29. InnoDB 테이블이 마지막으로 변경된 시점을 어떻게 알 수 있습니까?
- 30. 하나의 C# 프로그램이 여러 계정에서 실행될 수 있습니다.
좋은 지적입니다. 나는 삶을 편하게하기 위해 대신 설정 파일을 쓸 것이라고 생각한다. 감사 – Memb