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
[72022] Re:for문, While문 수행 중 창이 닫히지 않는 현상 알려주세요 ㅠㅠ
김시환 [godson2] 3681 읽음    2014-11-24 14:01
위에 분이 쓰레드를 쓰라고 하셨는데 뭐 가능은 하겠지만 이런 간단한 부분에 쓰레드 까지 사용한다는 것은 너무 코드 낭비처럼 보입니다. 또 이제 공부하는 분인데 쓰레드 구현도 쉽지 않을 것 같고요..

이런 경우 플래그를 사용하면 간단히 해결할 수 있습니다.

해당 폼 클래스에 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문 수행 중 창이 닫히지 않는 현상 알려주세요 ㅠㅠ 김시환 3681 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문 수행 중 창이 닫히지 않는 현상 알려주세요 ㅠㅠ 김시환 3522 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.