최근 몇일동안 C++ 버전으로 되어있는 키넥트SDK 예제를 MFC로 한번 이식해서 만들어봐야겠다!! 라고 굳게 다짐하고,
프레임워크를 짰다가 맘에 안들어서 다시 지우고를 5번정도 했을때,
가장 맘에 드는 프레임 워크가 짜졌다.
그 구조는.. 간단히 말해서,
이렇게 인데, Kinect 클래스와 OpenCV 클래스를 각각 만든 후,
OpenCV 클래스 내부에서 Kinect 클래스를 동적할당하여 사용하는 방식이다.
(뭐 다른 좋은 방법도 있겠지만, 아직 보지못했고, 여러번 프레임워크를 짜면서 느낀점을 취합하여 선택한 구조라는... ㅠㅠ)
이방식의 장점은 내가 아주 사랑하고 애용하는 싱글턴 패턴 사용빈도를 확!! 줄일수있어서 성능이 향상 되었고,
또 Kinect 와 OpenCV 를 각각 클래스화 시켜서 관리하기 편하게 만들었기때문에 정리정돈도 잘된 느낌이다. (지극히 주관적인 생각 ^^;;)
어째뜬 이제 제일 중요한 쓰레드만 남기고 있는 상황이었는데, 여기서 문제가 터졌다.
Kinect Class 내부의 멤버함수를 Thread 생성해서 실행시키려니깐..
error C3867 에러가 뜬다.
응..??
"&CDebugger::DebugMessageLoop'을(를) 사용하여 멤버에 대한 포인터를 만드십시오."
이건 뭐지..??
그래서 검색해보니깐...
CreateThread() 함수에 넘겨줄 수 있는 함수는 다음과 같다고 한다.
1. Static 멤버 함수
2. 클래스 멤버가 아닌 함수
그러나, Static 멤버 함수로 선언을 하게되면.. 멤버 변수에 접근이 불가능하지 않은가..
다시 뭔가 불안감이 엄습해왔지만...
다른 방법이 꼭!! 꼭!! 반드시!! 있을거라 생각하고 좀더 검색해보자 마음을 먹고,
구글링을 해보다가 다음과 같은 상콤한 방법이 존재한다네요. 빠밤~~
그 방법은, static으로 ThreadProc를 선언하고, 이 함수의 인수로 this를 넘겨준 다음,
ThreadProc에서 인수를 클래스로 캐스팅해서 원하는 함수를 호출하면된다네요,
즉,
ThreadHandle = CreateThread(NULL, 0, ThreadProc, this, 0, NULL);
이렇게 Thread를 생성한 다음,
static DWORD WINAPI Foo::ThreadProc(LPVOID lParam)
{
Foo *This = (Foo *)lParam;
return This->Test();
}
void Foo::Test()
{
printf("This is just Test!!\n");
}
흐흐 ~~~~ 그래서 완성~~!!
어째뜬 참고 하실분들은 참고하길...
이렇게 하여 Kinect SDK Sample C++ Source 를 MFC로 이식 완료!!
VS2010, MFC + OpenCV + KinectSDK
'[ Topics ] > Kinect 1.0' 카테고리의 다른 글
Skeleton 의 Joint 와 Depth 값 구하기(130923_소스추가) (40) | 2012.01.07 |
---|---|
키넥트를 이용하여 진행 할 나의 프로젝트에 대한 고찰과 Hand-Tracking 개요 (0) | 2012.01.07 |
[Tommy's Kinect. vol.3] Depth 카메라 출력 및 Depth 값을 응용 (5) | 2011.12.27 |
[Tommy's Kinect. vol.2] Kinect SDK를 이용하여 RGB 카메라 출력해보기 (6) | 2011.12.27 |
[Tommy's Kinect. vol.1] 키넥트와의 만남 (2) | 2011.12.27 |