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
[53645] Re:타이머에 대해서 질문입니다.
김동원 [bandit21c] 1395 읽음    2008-06-12 16:19
조세현 님이 쓰신 글 :
: TTimer를 사용해서 임의의 함수를 거치는 동안 ProgressBar를 시간이 갈 수록 채우려고 하는데
:
: 해당 함수가 끝난 다음에야 ProgressBar가 채워지네요
:
: 함수에 들어가기 전에 타이머를 셋시켰는데 말이죠...
:
: 함수 수행 중간엔 타이머가 안 걸리나요?

함수 내의 코드에서 loop를 사용하는 것으로 생각되는군요.
이론적으로는 가능한 얘기지만 loop를 사용하는 경우 window message가 정상적으로 처리되지 않는 경우가 있습니다. 정확히 표현하면 message queue에 쌓여있고 pumping이 되지 않는 것이지요.
함수의 실행이 끝나면 message가 한꺼번에 처리되고 그래서 ProgressBar가 한꺼번에 쫘악 채워질것입니다.
이를 해결하기위해서는 loop내에 Application->ProcessMessages()를 호출하여 Message를 pumpin하거나
loop 내에서 다음 함수를 호출하여 WM_PAINT message만을 pumping하면 원하는 결과를 얻을 수 있을것입니다.

// WM_PAINT message pumping 함수
void __fastcall PumpPaintMessage(HWND hWnd)
{
    MSG msg;
    while(::PeekMessage(&msg, hWnd, WM_PAINT, WM_PAINT, PM_REMOVE))
    {
        ::TranslateMessage(&msg);
        ::DispatchMessage(&msg);
    }
}

도움이 됬길 바랍니다.
즐프하시길~~

+ -

관련 글 리스트
53643 타이머에 대해서 질문입니다. 조세현 1363 2008/06/12
53645     Re:타이머에 대해서 질문입니다. 김동원 1395 2008/06/12
56502         어랏~! 김차장님이시네..ㅋㅋㅋㅋㅋ(내용무) 김민재 1197 2009/03/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.