2011-11-22 2 views
0


사용자가 시작한 QMainWindow 닫기 이벤트와 Linux의 SIG_KILL 또는 Windows의 TerminateProcess()에 의한 비정상 종료를 어떻게 결정할 수 있습니까?
긴급 성의 차이가 있기 때문입니다.
사용자 또는 사용자가 종결을 요구할 수 있다고 생각할 수 있습니다.
하지만 사용자가 다음 치명적인 중단 시도를 할 때까지 최대한 빨리 중간 결과와 현재 상태를 저장해야합니다.
closeEvent()에서 마우스 위치를 분석하는 방법을 알아낼 수 있습니다. 그러나 작업 표시 줄 모양에 따라 다릅니다. 앱을 최소화되지 않은 상태로 설정하고 다음 사용자 작업을 기다릴 수 있습니다. 그러나 이는 중단 사건에서 좋은 행동이 아닙니다. 사용자는 다음 치명적인 중단 작업을 시도하거나 저장 시간을 잃을 수 있습니다.
안부, 겐 나디Qt QMainWindow는 사용자가 종료하고 시스템을 통해 중단 함을 의미합니다.

+0

새로운 질문이 있으시면 새 질문을하십시오. – Mat

답변

2

하면 응용 프로그램이 SIGKILL를 수신하는 경우, 그것은 아무것도 할 수있는 시간이 것입니다. 그 자리에서 종결됩니다. 신호를 포착하거나 차단할 수 없습니다. 따라서 SIGKILL을 정상적인 응용 프로그램 종료와 "차별화"할 수는 없습니다. 강제 종료 된시기를 알 수는 없습니다. (TerminateProcess()과 동일)

정상적인 응용 프로그램 종료 중에 작업해야하는 경우 정리 루틴을 QCoreApplication::aboutToQuit() 신호에 연결해야합니다. 문서가 정확히 무엇을 위해 설계되었는지 확인하십시오.

관련 문제