C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[72023] Re:Re:for문, While문 수행 중 창이 닫히지 않는 현상 알려주세요 ㅠㅠ
임용태 [lyt0324] 3731 읽음    2014-11-24 14:30
정말 감사합니다!

혹시 버튼이 아닌 폼 닫기 버튼을 눌렀을 경우에는 어떻게 하는지 궁금합니다!

MainForm에서는 김시환님께서 알려주신 방법으로 FormClose이벤트에 맴버변수를 1로 바꿔서 하는 방법을 사용하였는데 정상작동되는 것을 확인하였습니다.

그런데 MainForm이 아닌 다른 추가적으로 생성한 Form에서는 폼의 닫기 버튼을 눌렀을 경우 For문과 While문 안에서 빠져나오지 못하고 FormClose이벤트 안으로 들어오지 못했습니다. ( For문과 While문의 루프가 끝난 후 FormClose이벤트로 들어옴)

이 경우는 어떻게 해야되는지 알고싶습니다 ㅠㅠ



김시환 님이 쓰신 글 :
: 위에 분이 쓰레드를 쓰라고 하셨는데 뭐 가능은 하겠지만 이런 간단한 부분에 쓰레드 까지 사용한다는 것은 너무 코드 낭비처럼 보입니다. 또 이제 공부하는 분인데 쓰레드 구현도 쉽지 않을 것 같고요..
:
: 이런 경우 플래그를 사용하면 간단히 해결할 수 있습니다.
:
: 해당 폼 클래스에 private 멤버 변수로 flag 를 하나 선언해 주세요..
:
: int flag_form_close ;    <-- 멤버 변수 선언 (폼 헤더파일 안에서 선언)
:
: void __fastcall TForm2:btn_close(TObject *Sender)    <-- 폼을 닫기위한 버튼에대한 이벤트 함수 
: {
:     flag_form_close = 1 ;
: }
:
: void __fastcall TForm2::DelayTime(int nTime)             //원하는 시간만큼 Delay를 주는 함수.
: {
:      MSG message;

:      clock_t clk = clock() + nTime;
:      while(1) {
:          Sleep(1);
:          if(clock() > clk)    break;
:                 if(flag_form_close == 1) break ;
:                 Application->ProcessMessages();    <-- 꼭 있어야 함..
:      }
:  }
:
: void __fastcall TForm2::btGoClick(TObject *Sender)             // 버튼을 클릭하면 사각형을 순서대로 그리는 함수.
:  {
:      bGoStop = true;
:         flag_form_close = 0 ;
:
:      for (int i = 5; i < 35; i++) {
:          Application->ProcessMessages();                                         // 다른 이벤트를 받아온다.
:          Image1->Canvas->Rectangle(i,i,5*i,5*i);
:          DelayTime(500);
:                
:                 if( flag_form_close  == 1) break ;
:      }
:  }
:
: 임용태 님이 쓰신 글 :
: : 빌더를 공부하는 초보입니다.
: :
: : For문과 While문을 처리하는 도중에 폼 닫기버튼을 누르면 닫히지 않습니다.
: :
: : 디버깅을 해본 결과 Main폼에서는 닫기 버튼을 누르면 FormClose()이벤트 안으로는 들어는 가는데 닫히지 않습니다.
: :
: : 그리고 Main폼이 아닌 다른 폼에서는 닫기 버튼을 눌러도 FormClose()이벤트 안으로 들어오지 않습니다. ㅠㅠ
: :
: : For문과 While문이 끝난 후에 프로그램이 종료됩니다 ㅠㅠ
: :
: : 어떻게 해야하나요? ㅠㅠ
: :
: : void __fastcall TForm2::DelayTime(int nTime)             //원하는 시간만큼 Delay를 주는 함수.
: : {
: :     MSG message;
: :
: :     clock_t clk = clock() + nTime;
: :     while(1) {
: :         Sleep(1);
: :         if(clock() > clk)
: :             break;
: :     }
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm2::btGoClick(TObject *Sender)             // 버튼을 클릭하면 사각형을 순서대로 그리는 함수.
: : {
: :     bGoStop = true;
: :     for (int i = 5; i < 35; i++) {
: :         Application->ProcessMessages();                                         // 다른 이벤트를 받아온다.
: :         Image1->Canvas->Rectangle(i,i,5*i,5*i);
: :         DelayTime(500);
: :     }
: : }

+ -

관련 글 리스트
72020 for문, While문 수행 중 창이 닫히지 않는 현상 알려주세요 ㅠㅠ 임용태 3739 2014/11/24
72022     Re:for문, While문 수행 중 창이 닫히지 않는 현상 알려주세요 ㅠㅠ 김시환 3682 2014/11/24
72023         Re:Re:for문, While문 수행 중 창이 닫히지 않는 현상 알려주세요 ㅠㅠ 임용태 3731 2014/11/24
72025             Re:Re:Re:for문, While문 수행 중 창이 닫히지 않는 현상 알려주세요 ㅠㅠ 김시환 3701 2014/11/24
72026                 Re:Re:Re:Re:for문, While문 수행 중 창이 닫히지 않는 현상 알려주세요 ㅠㅠ 임용태 3522 2014/11/24
72027                     Re:Re:Re:Re:Re:for문, While문 수행 중 창이 닫히지 않는 현상 알려주세요 ㅠㅠ 김시환 3523 2014/11/24
72028                         Re:Re:Re:Re:Re:Re:for문, While문 수행 중 창이 닫히지 않는 현상 알려주세요 ㅠㅠ 임용태 3636 2014/11/24
72021     Re:for문, While문 수행 중 창이 닫히지 않는 현상 알려주세요 ㅠㅠ 정영훈 3800 2014/11/24
72024         Re:Re:for문, While문 수행 중 창이 닫히지 않는 현상 알려주세요 ㅠㅠ 임용태 3664 2014/11/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.