C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[981] [퀴즈] 다음 코드의 문제점을 찾아보세요
장성호 [nasilso] 10626 읽음    2010-04-09 11:40
다음 코드의 문제점을 찾아보십시요

제목에 쓰여있듯이 간단한 문제입니다.

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    int iVal=StrToIntDef(Edit1->Text,0);
    ShowMessage(iVal);
}


가끔 이와같은 실수를 하는 이가 있는것 같구요
사실 예전에 저도 이런실수 했었구요 ㅋㅋ



잉....
답변이 없네요. 너무 쉬워서 그런가?

힌트
힌트 나갑니다.

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    int iSleepTime=StrToIntDef(Edit1->Text,1000);    
    Sleep(iSleepTime);     //이때 sleep하는 동안 어플이  먹통이 되죠
}
//그래서 다음과 같이 코딩하는 경우를 봤습니다.
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    int iSleepTime=StrToIntDef(Edit1->Text,1000);    
    int itic=GetTickCount();
    while(true)
    {
          Sleep(1);
         //이렇게 하면 sleep하는 동안 어플이 먹통이 되지는 않죠
          Application->ProcessMessages();  
          if((GetTickCount() - itic)>=iSleepTime) break;
    }
}



바로위에서 두번째 코드도  똑같은 문제를 야기 시키죠~!

Q&A에 올라오는 질문중에서 위와같은 코드를 가끔씩 보게되어
이런 퀴즈를 올려본것입니다.

그럼..
송신영 [palindrome]   2010-04-13 13:49 X
인터벌 시간만큼 팝업이 계속 뜰것 같은데요...
장성호 [nasilso]   2010-04-14 15:29 X
네 맞습니다.

TimerHandler 메소드 안에서 Timer를 죽이지 않고
Message펌프 루틴이 들어가는 경우의 문제점을 지적한 것입니다.
(Application->ProcessMessages ,  ShowModal , GetMessage+Dispatch..  등..)

그런데  심심찮게 Q&A에 저런 코드가 올라오네요..
송신영 [palindrome]   2010-04-17 23:39 X
저도 생각없이 코딩하다보면 저런 실수를 한다는 ㅡㅡ;;
지금 시작 [rncjsdn2002]   2010-08-26 16:04 X
그렇군요.... 난왜 몰랏을까 ㅠ.ㅠ

+ -

관련 글 리스트
981 [퀴즈] 다음 코드의 문제점을 찾아보세요 장성호 10626 2010/04/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.