|
위에 분이 쓰레드를 쓰라고 하셨는데 뭐 가능은 하겠지만 이런 간단한 부분에 쓰레드 까지 사용한다는 것은 너무 코드 낭비처럼 보입니다. 또 이제 공부하는 분인데 쓰레드 구현도 쉽지 않을 것 같고요..
이런 경우 플래그를 사용하면 간단히 해결할 수 있습니다.
해당 폼 클래스에 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);
: }
: }
|