|
착한아빠님 답변 감사합니다. 도움 많이 되었어요~
착한아빠 님이 쓰신 글 :
: 하시려는 정확한 의도가 무엇인지 잘 모르겠네요.
: 다만 지연시키는 것에 대해서 이해를 돕고자 합니다.
:
: 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()함수중에 하나를 사용해서 딜레이를 주었는데
: :
: : 이 딜레이되는동안 타이머가 동작을 하지 않는군요....
: :
: : 즉 딜레이를 주긴하지만 타이머는 그대로 계속 동작을 시키고 싶습니다.
: :
: : 방법이 있을까요? 쓰레드로 타이머를 돌리면 가능할 것 같은대 쓰레드는 한번도 안써봐서...
: :
: : 혹시 더 간단한 방법을 알고 계시면 알려주시고 아니면 쓰레드를 사용하여 해당 타이머함수를 돌리는 방법이라도
: :
: : 알려주시면 감사하겠습니다 ㅠ.ㅠ
: :
: : 염치없지만 답변 부탁드릴께요...
|