2009-11-11 3 views
3

내 프로그램이 올바르게 종료되지 않으면 시스템이 불안정 해집니다. 실제로 해결 방법은 없습니다. 그래서, 내 프로그램이 충돌하고 올바르게 찢어지지 않으면, 사용자에게 시스템을 다시 실행하려고 할 때 시스템이 불안정한 상태로 남았음을 알릴 필요가있다. 이 작업을 수행하는 올바른 방법은 올바르게 종료 할 때 잠금 파일을 시작하고 삭제할 때 잠금 파일을 만드는 것입니다. 파일이 존재하고 그 파일이 존재하면 이전에 충돌이 발생한다는 것을 알았습니다. 이것이 올바른 접근 방법입니까?내 프로그램이 마지막으로 실행될 때 프로그램이 충돌했는지 어떻게 알 수 있습니까?

답변

5

두 가지 :

  • Application Recovery and Restart API 비스타와 Win7에 사용할 수 있습니다. OS가 사용자에게 알릴 복구 기능을 지정할 수 있습니다. 사용자에게 알림이 전송됩니다.
  • unhandled exception filter을 만들면 다른 곳에서 충돌이 발생하는 경우 실제로 복구를 수행 할 수 있습니다. 이것은 XP에서도 작동합니다. 필자는이 기술을 사용하여 이전에 올바르게 닫히지 않은 경우 응답하지 않는 드라이버를 닫습니다.
0

계정을 고려하면 앱과는 별도로 잠금 파일이 삭제되지 않을 수 있습니다 (예 : .e.g). 네트워크 오류, 파일 시스템 오류, o.s 오류.

요구 사항에 따라 현재 상태가 유효한지 여부를 확인하는 것이 절대적으로 중요 할 경우 잠금 파일에만 의존하지 않고 모든 종속 변수 및 상태를 검사하여 유효성을 확인해야합니다. 그렇지 않으면 종료 상태를 모니터링하는 쉬운 방법이 될 수 있습니다. 미사일을 다시 발사해야할지 여부를 결정하기 위해 의뢰하지 마십시오. 유용 할 수 있습니다

+0

좋은 지적입니다. 나는 삶을 편하게하기 위해 대신 설정 파일을 쓸 것이라고 생각한다. 감사 – Memb

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'분 등 자동 저장 문서와 같은 정보가 더 많을 수 있지만 요점은 유효합니다 :-)

관련 문제