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
[62635] Re:sleep() 또는 delay()함수 관련 문의
착한아빠 [ux7516] 2870 읽음    2010-10-11 15:27
하시려는 정확한 의도가 무엇인지 잘 모르겠네요.
다만 지연시키는 것에 대해서 이해를 돕고자 합니다.

Sleep()은 현재 동작하는 Thread를 멈춥니다.
만약 Timer함수에서(폼에 타이머 컨트롤을 가져다가 더블클릭해서 만든함수)
Sleep()을 사용하면 당연하게도 Main Thread에서 Sleep이 일어났기 때문에
Main Thread 전체가 멈추는 효과가 있게 됩니다.
따라서 어떤 이벤트도 받을 수 없는 것은 당연합니다.
Sleep은 Thread를 따로 만들어서 사용하지 않는 한 거의 쓸모가 없을 겁니다.

그렇다면 어떻게 지연을 할 것인가?
여기에는 각자의 트릭이 있을 수 있을 겁니다.

일을 시켜보면 '지연'을 다음과 같이 해오는 사람들이 있어서 매번 지적합니다.

1. while문을 만들고 대기한다. ^^;;
간단하기는 하지만 dead lock의 위험과 역시 다른 작업은 불가능한 문제가 있습니다.
(*)

2.  while문을 만들고 시간을 측정하면서 Appication->ProcessMessage();로 다른 이벤트
를 받아온다.
약간 나아지기는 했지만 오히려 Stack Overflow나 재귀 호출 효과 같은 찾기 어려운 문제를
야기시키기도 합니다.
(**)

3. Member변수를 만들어서 해당 변수조건에서 시간을 체크하게해서 대기합니다.
   즉 타이머에 Step을 만들어서 각 Step으로 처리하는 방법입니다.
많이 좋아지기는 했습니다. 하지만 시간 체크하고 Interval을 변화시키는 부분이 불편합니다.
(****)

4. Thread로 따로 빼서 Process를 구현하고 필요에 따라서 Sleep을 사용합니다.
상당히 훌륭하기는 한데,   화면 Display는 따로 하던지 UI component는
동기화해야 합니다. Thread를 생성하고 소멸할 때 주의를 기울여야합니다.
(****)


개인적으로는  GetTickCount()는 API함수를 이용해서 시작 시점을 받아둡니다.
그리고 현재시간과 시작 시점의 차를 이용합니다.
차의 값이 원하는 값 이하이면 return을 합니다,  다른 Timer나 이벤트, Thread에 기회를
넘겨주는 거죠.
어찌보면 3번 방법의 다른 형태입니다.
GetTickCount()함수의 Y2K버그는 차가 음수가 되면 보정해주어야 합니다.

회사에 간단하게 만든 class가 있기는 한데...
일하는 사람이라 길게 자세히 설명 못드려서 죄송하네요. ^^;;


지금 시작 님이 쓰신 글 :
: 안녕하세요~
:
: 제가 전류 메타로부터 전류를 읽어 들이는 프로그램을 하고 잇습니다.
:
: 이때 전류 메타가 시리얼 통신으로 타이머를 돌리면서 계속 값을 읽어 뿌려주고 있는데요
:
: 헌데 전류메타가 전류를 읽는데 시간이 필요해서 딜레이를 주려고 합니다.
:
: 그래서 sleep()과 delay()함수중에 하나를 사용해서 딜레이를 주었는데
:
: 이 딜레이되는동안 타이머가 동작을 하지 않는군요....
:
: 즉 딜레이를 주긴하지만 타이머는 그대로 계속 동작을 시키고 싶습니다.
:
: 방법이 있을까요? 쓰레드로 타이머를 돌리면 가능할 것 같은대 쓰레드는 한번도 안써봐서...
:
: 혹시 더 간단한 방법을 알고 계시면 알려주시고 아니면 쓰레드를 사용하여 해당 타이머함수를 돌리는 방법이라도
:
: 알려주시면 감사하겠습니다 ㅠ.ㅠ
:
: 염치없지만 답변 부탁드릴께요...

+ -

관련 글 리스트
62619 sleep() 또는 delay()함수 관련 문의 지금 시작 1513 2010/10/08
62649     Re:sleep() 또는 delay()함수 관련 문의 프리프리v 2227 2010/10/12
62641     Re:sleep() 또는 delay()함수 관련 문의 지금 시작 1609 2010/10/11
62635     Re:sleep() 또는 delay()함수 관련 문의 착한아빠 2870 2010/10/11
62640         Re:Re:sleep() 또는 delay()함수 관련 문의 지금 시작 1719 2010/10/11
62620     Re:sleep() 또는 delay()함수 관련 문의 Intotheblue 2565 2010/10/09
62622         Re:Re:sleep() 또는 delay()함수 관련 문의 김종기 2084 2010/10/09
62623             Re:Re:Re:sleep() 또는 delay()함수 관련 문의 지금 시작 1809 2010/10/09
62626                 Re:Re:Re:Re:sleep() 또는 delay()함수 관련 문의 Intotheblue 1893 2010/10/10
62624                 Re:Re:Re:Re:sleep() 또는 delay()함수 관련 문의 땅주인 2052 2010/10/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.