|
윈도우에서 발생하는 메세지들은 발생순서대로
큐에 들어가지만 윈도우 메세지에도 우선순위가
있어요.
사용자 반응에 즉각 응답해야하는 키보드, 마우스
같은 메세지는 우선순위가 높지만 wm_paint
타이머 같은 메세지는 순위가 낮아요.
발생 순서대로 큐에는 들어가지만, 메세지 핸들러로 보낼때는 우선순위가 높은 놈들을 먼저 꺼내서
처리하고 낮은것들은 한가할때 보내요.
그래서 타이머에 의존해서 코딩하는것은
좋은 방법이 아니에요
그린비 님이 쓰신 글 :
: 안녕하세요. 요즘 환절기라서 비염에 감기 걸리는 사람도 있고, 건강 잘 챙기시길 바라면서~
:
: 질문 드립니다.
:
:
: VCL 버튼 클릭이벤트나 또는 통신 컴포넌트의 데이터 RCV 이벤트 발생 시, 해당 이벤트 처리가 이뤄지는 타이밍이 궁금합니다.
:
: 예를 들어,
: 메인 프로세스가 하나 있고, 이곳에 타이머가 3개라고 가정했을때 (타이머 Interval은 100ms 정도로 가정)
: 타이머 순서는 A->B->C 순이라고 가정.
: TimerA()
: {
: 함수1();
: 함수2();
: 함수3();
: }
:
: TimerB()
: {
: 함수4();
: }
:
: TimerC()
: {
: 함수5();
: }
: 이러한 구조에서 버튼 클릭 이벤트가 발생하게 되면,
: 타이머 A,B,C를 완료하고 나서(함수1,2,3,4,5을 완료) 이벤트 처리가 되나요? 아니면, 메인 프로세스에서 어떤 처리를 하고 있던지 즉시 이벤트 처리가 되나요??
:
:
: 목적은 이벤트 발생시 변수에 데이터를 넣고 이 데이터를 기준으로 최초 A타이머의 함수1,2,3이 순차적으로 처리를 하려고 합니다.
: 만약 TimerA에 함수 2번 동작중 데이터가 변경되면 함수2번 에서 부터 처리가 되면 문제가 됩니다.
: 함수 1번부터 변경된 데이터를 가지고 처리를 해야 하거든요.
:
: 그래서 해결방법으로는 이벤트 발생시 임시데이터를 변경하고 임시데이터를 바로 사용하는게 아니라. 함수1에서 이 임시데이터를 실제 데이터에 대입해서 처리하게끔 하면 함수1->2->3 순차적으로 돌아 갈 것 것 같은데요.
:
: 결론적으로 질문은,
: 1) 이벤트 발생 시점이 정확히 언제인지 잘 몰라서 문의드립니다.
: 2) 통신 컴포넌트의 데이터 RCV 타이밍도 같은 개념일까요? (IndyTCP 나 IndyFTP 등)
:
:
: 그럼 오늘 하루도 즐프 하시길 바라면서~
: 조언 부탁드립니다.
:
|