MFC는 자체적으로 구현한 TLS(Thread Local Stroage), 즉 MFC TLS를 사용하여 MFC의 상태 정보를 관리한다.
MFC가 관리하는 상태정보는 3가지가 있다.
- 스레드 정보 : _AFX_THREAD_STATE
- 모듈 정보 : AFX_MODULE_STATE
- 모듈 스레드 정보 : AFX_MODULE_THREAD_STATE
_AFX_THREAD_STATE, AFX_MODULE_STATE, AFX_MODULE_THREAD_STATE 는 MFC 상태 정보 관리를 위해 사용되는 클래스이다.
_AFX_THREAD_STATE
- 스레드 단위로 정보를 관리하기 위한 클래스
- 스레드 마다 생성(스레드 단위의 전역 변수(TLS))
- 어플리케이션은 _AFX_THREAD_STATE를 이용하여 내부적으로 관리하는 스레드 정보에 접근할 수 있다.
- 내부적으로 관리하는 스레드 정보
- 현재 스레드의 마지막 메시지, 마우스 좌표, 훅 함수등…
- 보다 자세한 내용은 afxstat_.h의 _AFX_THREAD_STATE클래스 정의 부분을 참고.
- _AFX_THREAD_STAT의 주목적은 AFX_MODULE_STATE 클래스를 포함하기 위한 것이다.
AFX_MODULE_STATE
- 실행 모듈 정보를 관리하기 위한 클래스
- 실행 모듈 단위의 전역 변수
- 내부적으로 관리하는 정보
- 어플리케이션 객체 포인터
- 인스턴스 핸들
- 리스소 인스턴스 핸들
- 윈도우 프로시저 주소
- 런타임 클래스(CRuntimeClass)리스트
등… 보다 자세한 내용은 afxstat_.h의 AFX_MODULE_STATE클래스 정의 부분을 참고.
AFX_MODULE_THREAD_STATE
- 특정 모듈에서 특정 스레드가 생성하거나 설정한 정보를 관리하기 위한 클래스
- 스레드 마다 생성(스레드 단위의 전역 변수(TLS))
- 내부적으로 관리하는 정보
- 핸들맵 등…
보다 자세한 내용은 afxstat_.h의 AFX_MODULE_THREAD_STATE클래스 정의 부분을 참고.
참고.
- AFX_MANAGE_STATE
- 어떤 함수 안에서 현재 스레드의 AFX_MODULE_STATE 전환을 위해서 AfxSetModuleState함수를 직접 호출하는것보다는 AFX_MANAGE_STATE 매크로를 사용하는것이 편리하다.
- AfxGetAppModuleState()
- MFC는 전체 모듈(실행을 위해 로드 되어 있는 .EXE와 모든 DLL)들을 논리적인 하나의 모듈로 보고, 이것을 위해 AFX_MODULE_STATE를 할당한다. 이렇게 할당된 AFX_MODULE_STATE 객체를 반환한다.
- AfxGetModuleState()
- 현재 실행 흐름(스레드)을 기준으로 AFX_MODULE_STATE 객체를 반환한다.
- AfxGetStaticModuleState()
- 항상 호출 시점의 모듈에 선언된 AFX_MODULE_STATE 객체를 반환한다.
(From http://dstein.egloos.com/2017307)