2009-09-13 2 views

답변

7

나는 그것이 완전히 메소드가 리턴되는 시점에 저장됩니다 확신한다 이 이 시점에서 완전히 저장되지 않습니까?

"게으른 글쓰기"가있는 유일한 주름은 Windows 자체가 아직 파일을 디스크에 물리적으로 작성하지 않았지만 응용 프로그램 (또는 다른 응용 프로그램)에 관한 것입니다. 부적절한. Windows가 디스크에 커밋을 완료하기 전에 파일에 액세스하려고 시도하면 파일에 안전하게 액세스 할 수있을 때까지 응용 프로그램이 단순히 "차단"되지만 특별히 처리 할 필요가 없으면 "그냥 작동합니다".

0

응용 프로그램을 깨끗하게 정지 시키려면 몇 가지 옵션이 있습니다.

1) 기본 양식을 닫습니다. 기본 폼을 닫으면 응용 프로그램이 닫힙니다.

procedure TForm1.SaveAndClose(Filename:String); 
begin 
    Bitmap.SaveToFile(filename); 
    Application.Mainform.Close; 
end; 

2) Application.Terminate 호출합니다. 이렇게하면 응용 프로그램이 갑자기 종료되지만 모든 종료 코드가 실행됩니다. 응용 프로그램이 WM_Quit 메시지를 받거나 기본 폼을 닫을 때 일반적으로 호출됩니다.

procedure TForm1.SaveAndClose(Filename:String); 
begin 
    Bitmap.SaveToFile(filename); 
    Application.Terminate; 
end; 

3) 포스트 응용 프로그램/기본 폼에을 WM_CLOSE. 이렇게하면 응용 프로그램의 대기열에있는 다른 메시지가 처리된다는 추가 장점이 있습니다. 이것은 CTRL-F4를 누르거나 메인 폼의 오른쪽 상단에있는 "X"를 누르는 것과 같습니다. 유일한 문제는 메시지 대기열이 가득 차면 양식에 도달하지 못할 수도 있다는 것입니다 (드문 경우). 정수) :

procedure TForm1.SaveAndClose(Filename:String); 
begin 
    Bitmap.SaveToFile(filename); 
    postMessage(Application.MainForm,wm_close,0,0): 
end; 

4) (ExitCode를 정지를 호출합니다. 이것은 좀 더 극단적이며 응용 프로그램을 종료합니다. 종료 코드는 계속 실행되지만 메모리가 해제되지는 않습니다. 선택적으로 호출 응용 프로그램으로 되돌릴 종료 코드를 설정할 수 있습니다.

procedure TForm1.SaveAndClose(Filename:String); 
begin 
    Bitmap.SaveToFile(filename); 
    Halt(0); 
end; 
관련 문제