실제로 최근에 발견한 어플 버그로 새롭게 알게된 사실이다.
이건 Win32 API를 사용하는 Windows XP나 Windows CE 및 Windows Mobile에 모두 공통적으로 해당되는 내용이다.
전에 API문서에서 본 것도 같지만 실제 기억속에서 잊혀져서 모르는 것과 다름없는 사실이었다.

SetTimer() API를 사용할 때 주기적으로 WM_TIMER 메시지를 받도록 할 수도 있지만 callback함수로 호출되도록 할 수가 있다.

이것과 관련해서 유의해야할 점이 있다. MSDN의 SetTimer() 문서에 다음과 같은 이야기가 있다.

An application can process WM_TIMER messages by including a WM_TIMER case statement in the window procedure or by specifying a TimerProc callback function when creating the timer. When you specify a TimerProc callback function, the default window procedure calls the callback function when it processes WM_TIMER. Therefore, you need to dispatch messages in the calling thread, even when you use TimerProc instead of processing WM_TIMER.

즉 요약을 하면 TimerProc() 이라는 콜백(callback) 함수를 등록하더라도 윈도우 메시지를 처리하는 window procedure가 있어야 한다는 이야기다. 윈도우를 전혀 생성하지 않는 어플은 콜백방식을 사용하더라도 전혀 SetTimer()함수를 사용할 수가 없다는 이야기이다. 사용하려면 windows procedure를 만들어서 window message를 처리해 주어야 한다.

아래는 아주 오래전 MSDN magazine에서 관련 내용을 설명한 기사의 링크이다.
http://www.microsoft.com/msj/0397/hood/hood0397.aspx


이 기사에 따르면 WM_TIMER 메시지는 항상 발생하고 타이머 콜밸 함수를 등록했을 경우 DispatchMessage() 함수가 호출되었을 때 windows procedure로 WM_TIMER 메시지를 보내는 대신에 콜백함수를 호출하게 된다.

그렇다면 만약 TimerProc() 콜백에서 리턴을 하지 않을 경우 어떤 일이 벌어질까?
결국 WM_TIMER를 처리하는 코드를 계속 수행중인 상태가 되어버리고 그 이후의 윈도우 메시지 처리가 중단된 상태가 되어버린다.
이렇게 되면 TimerProc()이 리턴될 때까지 어플이 락업된 상태가 되어버리니 꽤 심각할 수 있다.
물론 모든 콜백 함수를 사용할 때 주의해야할 점이다.

즉 내용을 정리하면 TimerProc()은 windows procedure와 직접적인 관련이 있어서 처리할 때 그 사실을 염두해 두고 잘 처리를 해야한다.
신고


« Previous : 1 : ··· : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : 48 : ··· : 98 : Next »

 RSS Feed

방명록

Recent Posts

  1. Xcode4 프로젝트에 프레임..
  2. 특허침해에 휘말리는 iOS..
  3. 최근에 변경된 애플 앱스토..
  4. 아이폰 사용팁 20가지
  5. 나의 관심사 재정리하기

Recent Comments

  1. 영회님 좀 더 자세히 설명해주.. coderiff 2010
  2. 완전 멋진데.. 한가지 아쉬운.. 영회 2010
  3. 그렇군요. 지금까지 Gmail의.. 하인도 2010
  4. 저도 예전에 이것때문에 한동.. coderiff 2010
  5. 어이쿠~ 이런 비밀이 있었네요.. 로드맵 2010

Recent Trackbacks

  1. イベント m lサイズ でスタイ.. イベント m lサイズ でスタイ.. 2014
  2. refurbished laptops refurbished laptops 2014
  3. Personal Security Personal Security 2014
  4. 갤럭시 시리즈의 두번째 버전.. 2011
  5. 하인도의 생각 neohind's me2DAY 2010

Calendar

«   2017/11   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

Bookmarks

  1. The Old New Thing
  2. Windows Mobile Team Blog
  3. Windows CE Base Team Blog
  4. MobileDeveloper wiki
  5. 류한석의 피플웨어
  6. 애자일 이야기

Site Stats

TOTAL 2,634,593 HIT
TODAY 10 HIT
YESTERDAY 70 HIT

티스토리 툴바