|
윈도우는 메시지 처리방식으로 운영된다는건 아시지요~?
무한루프 안으로 들어가면 아무런 동작도 못하는 이유는 해당 인스턴스가 받은 메시지를 처리할 시간을 주지 않았기 때문입니다.
Application->ProcessMessages();
위 부분을 무한 루프 안에 추가해주면 인스턴스가 처리해야될 윈도우 메시지들을 처리 하게 하는것입니다.
아래 예제 코드를 참고하시고 자세한 내용은 ProcessMessages의 헬프를 참고하세요
m_bQuitIs 변수는 bool 타입의 멤버변수입니다.
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
m_bQuitIs = false; // 멤버 변수임으로 초기값이 false 설정되지만 그냥 초기화 해주는 부분입니다.
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
while(1)
{
// 키 이벤트는 아니지만 Button2에서 true값을 넣어주도록 되어있습니다. 결국 키값도 이벤트이기 때문에 같은 형식이지요
if(m_bQuitIs)
break;
int i = 1;
Application->ProcessMessages(); // 이부분을 제거하면 다른 동작은 전혀 하지 못하며
// 추가시엔 폼을 이동하거나 버튼을 누르는것이 가능해집니다.
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
m_bQuitIs = true;
}
//---------------------------------------------------------------------------
ymin 님이 쓰신 글 :
: 프로그램이 무한루프를 돌고 있을 때는 키를 눌러도
: 인식을 못하는데 혹시 무한루프 안에서 FormKeyPress 를
: 불러 사용하는 방법은 없는지 있다면 어떻게 사용하는지
: 아니면 다른 방법은 없는지요? 무한루프 안에서 탈출하는
: 방법을 묻고 있습니다.
|