본문 바로가기

개발 Note/UI Framework 개발하기

C로 짜져있는 모듈을 C++ 로 컨버젼할때.... 대략난감(1)

반응형

본인이 최근에 겪은 일중 하나가

기존에 짜여져 있던 코드가 Timer를 이용하여 text sliding을 구현되어져 있던 부분이 있었다.

그런데 기존에 timer의 코드가 Callback으로 되어있었는데 아무생각 없이 컨버젼을 하다보니.

헉... Timer callback을 어떻게 구현해야 하지? 라는 벽에 부딛치게 되었다.


기존 코드
KeyPressedProc()
{
  hSlideTimer = CreateTimer("test", SlideTimerCallback);
  StartTimer(hSlideTimer);
}


BOOL SlideTimerCallback(HTimer hTimer,int param)
{
   /*Implement text sliding*/
return TRUE;
}

C++ 컨버젼 코드
/**/
class TextView;

TextView::keyPress()
{
    hTimer = CreateTimer("test",흐걱!!!!!!!!);
    StartTimer(hTimer );
}

BOOL TextView::SlideTimer(HTimer hTimer,int param)
{
   /*Implement text sliding*/
return TRUE;
}


결국 임시로 TextView::SlideTimer를 static 함수로 바꿨다는 ...  ㅡㅡ;;;


--------------------------------------------------------------------------
TextView::keyPress()
{
    hTimer = CreateTimer("test",TextView::SlideTimer, static_cast(this));
    StartTimer(hTimer );
}


static BOOL TextView::SlideTimer(HTimer hTimer, int param)
{

TextView * pView = static_cast(param);
:
:
}

위와 같이 변경해서 사용하려니 이번에 문제는timer 가 expire되어 SlideTimer callback에 들어왔을때
최악의 case인 TextView로 만들었던 Instance가 사라졌다면? 을 고려해야 하는데.

이렇게 되면 C에서 하던것 처럼 instance들을 handle로 관리하고 handle로 접근하도록 변경해야 만 해결할 수 있게 된다.!!

이와 같은 경험을 통해 CTimer 라는 class를 만들고 이 Timer Subscribe를 생성하여, 객체가 timeout event를 받을 수 있도록 구현할 필요가 있다.