어떤 함수가 실행하는 동안 화면이 버벅거리지 않도록 윈도우 메세지를 처리하도록 할때 사용합니다.
예를 들어
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int k=0;
for(int i=0;1000;i++)
{
k+=i;
Sleep(100); //100ms
}
}
위와같은 코드가 있다면 함수가 끝날때 까지 최소 100초가 걸리겠죠
그럼 100초 동안 화면은 먹통이 될것입니다.
이런경우에 Application->ProcessMessages();를 for문 안에 넣어주면
버벅거림이 없어지겠죠
아래와 같이..
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int k=0;
for(int i=0;1000;i++)
{
k+=i;
Sleep(100); //100ms
Application->ProcessMessages();
}
}
그런데 한가지 주의할것은
위 함수같은 경우 Button을 마우스로 클릭했을때 처리하는 함수입니다.
for문 안에 Application->ProcessMessages(); 이 있으면
for문이 돌아가는 중에 button을 또다시 클릭하면 어떻게 될까요?
뭔가 좀 거시기 한 현상이 발생하겟죠?
이런 경우는 변수를 하나 두고 함수가 종료될때까지 그 함수가 다시 호출되지 않도록 처리하는게 일반적이죠
대충 이런식으로
void __fastcall TForm1::Button3Click(TObject *Sender)
{
static bOn;
if(bOn)return;
bOn=true;
int k=0;
try
{
for(int i=0;1000;i++)
{
k+=i;
Sleep(100); //100ms
Application->ProcessMessages();
}
}
__finally
{
bOn=false;
}
}
그럼..
초보자 님이 쓰신 글 :
: [초보자입니다]
:
: 가끔 소스에 보면
: Application->ProcessMessages(); 되어 있는데
:
: 이것은 어떤경우에 소스에서 사용하나요..
:
: 고수님.. 부탁합니다.
|