|
임펠리테리입니다.
혹시나 해서 써봅니다. 폼을 생성하고 보여주는 부분에서 syschronize를 하셨는지요. 만약 안하셨다면 문제가 발생하는 것은 당연합니다.
그럼 참고하시길...
이형종 님이 쓰신 글 :
:
: 별로 대단할 것도 없는 간단한 코드인데 Win2000에서는 실행이 안되고 죽어버립니다.
:
: 프로그램이 하는일은, 메인 유닛에서 쓰레드를 만들고 쓰레드에서 루프를 돌면서
: 할 일을 합니다. 이것이 끝나면 다 끝났다는 것을 알리기 위해 간단한 폼을 보여주고
: 거기에서 Ok 버튼을 누르면 쓰레드도 끝나게 됩니다.
:
: 프로그램이 죽는 곳은 그 폼을 만들 때 입니다. 코드는 다음과 같구요.. TThread::Execute()
: 의 마지막 부분에 있습니다.
:
: 1: StatusForm = new TStatusForm(MainForm);
: 2: StatusForm->ShowModal();
: 3: delete StatusForm;
:
: TStatusForm은 미리 디자인 된 폼으로 빌더가 갖고 있는 Label, StatisText, BitButton, Timer
: 정도의 컴퍼넌트만 갖고 있는 아주 간단한 폼입니다. Timer는 폼이 생성된지 10초 후 자동으로
: 닫히기 위한 것이구요.
:
: Win2000에 빌더가 설치되지 않은 관계로 제가 위의 라인 사이사이에 MessageBox()를 넣으면서
: 죽는 위치를 확인했는데 라인 '1'에서 죽더군요. 즉, 2번 라인을 마스킹 시켜도 죽습니다.
:
: 실행 상태가 저부분(라인 1)에 오면 Win2000이 다음과 같은 메시지박스를 보이면서 프로그램을 죽입니다.
:
: abc.exe에서 오류가 발생하여 종료됩니다. 프로그램을 다시
: 시작해야 합니다.
: 오류 로그를 작성하고 있습니다.
:
: 그래서 이벤트 로그를 보니 다음과 같은 것이 만들어져 있더군요.
:
: 원본: DrWatson
: 범주: 없음
: 종류: 정보
:
: 응용 프로그램()에서 응용 프로그램 오류가 발생했습니다.
: 오류는 2001/04/03 @ 14:57:36.489에 발생했습니다.
: 주소 77FB0491 (RtlRaiseStatus)에서 c0000025 예외가 발생했습니다.
:
: 제가 NT 쪽은 잘 몰라서 이것이 무엇을 의미하는지 잘 모르겠습니다.
:
: 아, 또 신기한 현상이 있는데요... 라인 '1'의 바로 앞에 MessageBox()를 넣고 거기서 버튼을 눌러야
: 진행하게 하면 StatusForm이 잘 보여지면서 프로그램도 죽지 않습니다.
:
: 메인 유닛에서 About-box를 같은 방식으로 만드는데 Win2000에서도 잘 보여지더군요.
: About-box는 쓰레드에서 생성하는 것이 아닌 것으로 봐서, 쓰레드에서 다른 유닛의
: 자식 폼을 만드려고 할 때 문제가 생기는 것이 아닌가 생각은 드는데.. 통 모르겠습니다.
:
: 도와주세요...
:
|