MFC 상태 정보 관리

-- VC++ 2009. 9. 8. 18:56
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
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 객체를 반환한다.

출처 : http://dstein.egloos.com/2017307

'-- VC++' 카테고리의 다른 글

Predefined Macros  (0) 2009.10.01
유니코드로 개발하기 (MFC프로젝트)  (0) 2009.09.24
socket connect timeout  (0) 2009.09.02
So you need a worker thread pool...  (0) 2009.08.11
Polling by sleeping vs polling by waiting with a timeout  (0) 2009.08.11
posted by 어린왕자악꿍