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
[53114] Re:고수님 Application->ProcessMessages(); 기능이 뭐고 , 어떤경우에 사용되나요
장성호 [nasilso] 3250 읽음    2008-04-14 17:56
어떤 함수가 실행하는 동안 화면이 버벅거리지 않도록 윈도우 메세지를 처리하도록 할때 사용합니다.

예를 들어
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();  되어 있는데
:
: 이것은 어떤경우에 소스에서 사용하나요..
:
: 고수님.. 부탁합니다.

+ -

관련 글 리스트
53112 고수님 Application->ProcessMessages(); 기능이 뭐고 , 어떤경우에 사용되나요 초보자 1257 2008/04/14
53114     Re:고수님 Application->ProcessMessages(); 기능이 뭐고 , 어떤경우에 사용되나요 장성호 3250 2008/04/14
53115         고맙습니다. 초보자 1107 2008/04/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.