none
MFC 사용자 정의 메시지 처리 그리고 타이머 함수에 대해서( 질문이 쉽습니다) RRS feed

  • 질문

  • 제가 MFC에서 타이머함수로 예를 들어

    1초마다 타이머함수를 호출은 한다고 했을때

    그 타이머함수안에서 1초마다 조건이 되는지 확인하는 코드가 있는데 조건이 되면 사용자 정의 메시지를 호출을합니다.

    여기까진 좋은데 제가 궁금한것은 말이죠 사용자 메시지 함수안에 조금 기~다란 코드들이 있습니다.

    그래서 타이머 함수가 그 메시지 함수를 다 처리를 하기도 전에 다시또 타이머 함수가 호출이 될까봐 우려해서 이렇게 질문을 드리는데여

    다른 메시지들하고 다 똑같이 타이머함수가 조건이 되면 메시지 함수를 호출만 하고 그거 처리하는건 확인도 안하고 바로 그 다음 코드로 넘어가나요? 

    글이 좀 길었는데 질문을 좀 요약하자면 타이머함수안에 메시지호출코드가 있다고해도 타이머함수하고 메시지함수하고 따로 노는거져?

    2019년 7월 11일 목요일 오전 5:18

모든 응답

  • 타이머가 호출되는 스레드도 메인 스레드이고, 메시지를 처리하는 스레드도 메인 스레드입니다.

    같은 스레드 안에서는 당연이 동시 작업이 불가능하죠. 

    일반적인 메인 스레드의 처리 흐름은 다음과 같을겁니다. (메시지 처리가 금방 끝날 경우)

    [                        1초                            ][                        1초                            ]

    <타이머 호출> -> <메시지 처리>              <타이머 호출> -> <메시지 처리>

    만약 메시지 처리가 1초 이상 지연된다면 아래와 같이 동작하겠죠.

    [                        1초                            ][                        1초                            ]

    <타이머 호출> -> <메시지 처리..........................................><타이머 호출> -> <메시지 처리.................>

    2019년 7월 11일 목요일 오전 8:54
  • 안녕하세요

    타이머가 만료되면 WM_TIMER 메시지를 스레드의 메시지 큐에 포스트합니다. WM_TIMER 메시지는 메인윈도우 프로시저가 처리하는게 아니라 응용 프로그램 정의 콜백 함수에 의해 처리됩니다.

    아래 링크를 참조하시기 바랍니다.

    https://docs.microsoft.com/en-us/windows/win32/winmsg/using-timers

    https://docs.microsoft.com/en-us/windows/win32/winmsg/wm-timer

    MSDN Community Support Ricky

    다른 커뮤니티 멤버에게 도움이 될 수 있게 문제를 해결 한 답변을 '답변으로 표시'를 클릭하시고 그렇지 않은 경우 '답변으로 표시 취소'를 클릭하시기 바랍니다. MSDN 서포트에 대한 의견이나 불만이 있을 경우 MSDNFSF@microsoft.com 으로 연락하시기 바랍니다.

    2019년 7월 11일 목요일 오전 9:24
    중재자
  • 해당 케이스  관련해서 업데이트가 있는가요? 만약 도움이 필요하시다면 해당 스레드에 말씀해 주시기 바랍니다

    MSDN Community Support Ricky

    다른 커뮤니티 멤버에게 도움이 될 수 있게 문제를 해결 한 답변을 '답변으로 표시'를 클릭하시고 그렇지 않은 경우 '답변으로 표시 취소'를 클릭하시기 바랍니다. MSDN 서포트에 대한 의견이나 불만이 있을 경우 MSDNFSF@microsoft.com 으로 연락하시기 바랍니다.

    2019년 7월 24일 수요일 오전 2:11
    중재자