|
장성호 님이 쓰신 글 :
: 어떤 함수가 실행하는 동안 화면이 버벅거리지 않도록 윈도우 메세지를 처리하도록 할때 사용합니다.
:
: 예를 들어
: 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(); 되어 있는데
: :
: : 이것은 어떤경우에 소스에서 사용하나요..
: :
: : 고수님.. 부탁합니다.
|