2009-08-27 5 views
0

CRITICAL_SECTION과 CCriticalSection 사이의 관계는 무엇입니까? 은 CCriticalSection이며 CRITICAL_SECTION의 래퍼입니까?CRITICAL_SECTION과 CCriticalSection 사이의 관계 선박은 무엇입니까

BTW :

나는 다음과 같은 코드는 CS 글로벌 없습니다 ..() 그래서이 XXX를 잠글 수 없습니다, 그것은이다 잠금 전에 모든 시간을 초기 meanless 생각?

int func 
{ 
CCriticalSection cs; 
cs.Lock(); 
XXX 
cs.Unlock(); 
} 

많은 감사!

답변

2

예 MFC CCriticalSection 섹션은 Win32 CRITICAL_SECTION의 래퍼 일뿐입니다.

이것은 표준 Win32 기능에 대한 래퍼 클래스의 거대한 집합 인 MFC의 거의 모든 것입니다.

코드 예제에서 그렇습니다. 해당 컨텍스트에서 중요한 섹션을 사용하는 것은 의미가 없습니다. 임계 영역이하는 일은 명명 된 뮤텍스와 비슷하지만 한 번에 하나의 스레드 만 리소스에 액세스 할 수 있습니다. 한 번에 두 개 이상의 스레드가 사용할 수없는 자원을 사용할 때 중요한 부분의 적절한 사용은 여러 스레드에서 액세스 할 대상으로 다음과 같습니다

MyGlobalCS.Lock(); 

// Do important work on resource 

MyGlobalCS.Unlock(); 

이 또한주의를하는 경우 그것 하드 얻을 수 중요한 부분을 공유 위치에 추가하면 대신 mutex이라는 이름을 사용할 수 있습니다.

+1

사실, 정말 유용한 것 중 하나가 제공 될 수 있다는 점은 가치가 있습니다. RAII, 그렇지 않습니다. C++과 MFC를 사용한다면, 실제로 * boost *를 사용하는 것이 좋습니다. –

+0

'대신'이 아니라 '나란히'라고 말하면서, 부스트는 확실히 MFC가 대상으로하는 GUI의 대다수를 대체하지 않습니다. – DeusAduro