ImagingAPI 의 사용시 발생한 문제점..
2008. 6. 21. 10:19
CxImage를 사용하다가 너무 느리다는 얘기가 있어 OS에서 제공하는
ImagingAPI를 사용해봤다. COM이다.. -_-;;

결과는 그럭저럭...

이 ImagingAPI COM을 사용하기 위해서 간단한 class를 하나 만들어서
생성자에서 CoInitializeEx( NULL, COINIT_MULTITHREADED )를 해주고
소멸자에서 CoUninitialize()를 해주었는데 여기서 문제 발생

디렉토리를 읽어 이미지 파일을 thumbnail로 보여주는 루틴이고 이미지를 로딩하는
쓰레드에서 수시로 이 클래스의 생성과 삭제를 하다보니 COM의 초기화와 해제가
빈번하게 일어나는데 이 때 정상적으로 해제를 못 하는 경우가 발생하는 듯 하다..
(쓰레드가 종료가 되지 않았다. 강제 종료를 시키다보니 또다른 문제 발생..)

이 이유를 찾기까지 쏟아부은 디버깅 시간... 으....

결국 프로그램 종료시까지 사라지지 않는는 객체를 만들고 이 객체에서 factory
class를 얻어와 새로 생성되는 객체에 factory class의 포인터를 넘겨주는 식으로
해결했다. 그리고 프로그램 종료시 처음으로 만들었던 객체를 삭제함으로써
COM을 해제할 수 있도록...


차라리 이 클래스를 사용한 곳에서 COM을 초기화하고 해제했으면
문제가 안 됐을 텐데 클래스를 만들 때 COM이 초기화 안되어 있으면
자동으로 초기화를 해주고 객체가 삭제 될 때 COM의 해제를 해줘라...
하는 루틴을 넣다보니 이렇게까지 오게 됐다.

-_-;;;;;


결론!!!!
COM의 초기화와 해제는 프로그램 시작과 종료시에 한번만!!

써드아이
써드아이