ATL 기반 In-Process Server에서 다중 스레드가 필요할 때.

ATL 기반 In-Process Server를 이용하여 코드를 프로그래밍하는 것은 경우에 따라서는 일을 간단하게 마무리지을 수도 있지만 때로는 깊은 생각을 필요로 하기도 한다. 특히, 하나 이상의 다중 스레드를 이용하여야 하는 경우가 더욱 그런데, ATL Simple Object의 FinalConstruct와 FinalRelease 메서드의 재정의를 이용하여 스레드를 관리하는 방법을 처음 써보았다. 하지만 문제점 투성이였고 이상한 버그가 계속 나타났다.

그래서 생각하게 된 것이 ATL에서 제공하는 간단한 Win32 Window Implementation 클래스를 활용하는 방법이다. 클라이언트에서 데이터를 주거나 받기 위한 목적으로 In-Process Server를 활용하는 과정이었으므로 WSAAsyncSelect를 이용하기에도 편리했다. WSAAsyncSelect로 ATL Window의 핸들을 넘겨주고 ATL Window에서는 해당 메시지에 대한 처리 핸들러만 추가하면 그 다음은 내가 종전에 일반 스레드로 구현하였던 코드를 그대로 가져가기만 하면 되는 것이라서 마이그레이션에 특별히 어려운 점도 없었다.

이렇게하여 select() 함수를 통한 I/O Multiplexing 기능 개선과 함께 더 호환성이 좋은 이벤트 시스템을 구축할 수 있었다.

댓글 남기기