MFC 스레드 동기화 - 이벤트 신호(Signaled) 와 비신호(Nonsignaled) 2개 상태를 가진 동기화 객체 - 이벤트 동기화 방법 1. 이벤트 객체를 비신호 상태로 생성 2. 하나의 스레드가 초기화 작업을 진행하고, 나머지 스레드는 이벤트 객체데 대해 Lock()을 호출함으로써 이벤트 객체가 신호 상태가 되기를 기다린다. (Sleep 상태) 3. 스레드가 초기화 작업을 완료하면, 이벤트 객체를 신호 상태로 바꾼다. 4. 기다리고 있던 모든 스레드가 깨어나서 작업을 진행한다. - 이벤트 특성에 따른 두 종류 1. 자동 리셋(Auto Reset) 이벤트 객체를 신호 상태로 바꾸면, 기다리는 스레드 중 하나만 깨운 후 자동으로 비신호 상태가 된다. 산호 상태에서 비신호 상태로 되는것을 리셋(Res..
MFC 스레드 동기화 - 뮤텍스 (Mutex, Mutual Exclusion) 임계 영역과 동일한 기능을 한다. 공유 리소스를 접근하는 다수의 스레드가 있을때 오직 하나의 스레드만 접근할 수 있도록 한다. 커널 모드로 동작하기 때문에 속도는 느리지만 여러 프로세스에 속한 스레드간의 동기화에 사용한다. Lock/unlock 으로 제어 특징> Lock() 호출에 성공한 스레드가 해당 뮤텍스 객체를 소유한다는 것이고, 뮤텍스를 소유한 스레드만이 Unlock() 을 호출하여 자신의 소유권을 포기할 수 있다. 뮤텍스 생성 함수 CMutex::CMutex(BOOL bInitiallyOwn = FALSE, LPCTSTR lpszName = NULL, LPSECURITY_ATTRIBUTES lpsaAttribute =..
MFC 스레드 동기화 동기화 객체 : 임계영역, 이벤트, 뮤텍스, 세마포어 - API 수준에서 동기화 객체를 다룰때는 종류별로 서로 다른 함수를 사용 - MFC는 이들을 비슷한 방법으로 다룰 수 있도록 클래스 구조와 멤버 함수를 제공하므로 좀더 편히하게 사용할 수 있다. - 임계 영역 같은 프로세스에 속한 스레드 간의 동기화 커널 모드가 아닌 사용자 모드에서 동작하므로 속도가 빠르다. 서로 다른 프로세스에 속한 스레드 간의 동기화에는 사용 못함. 두 스레드 중 먼저 Lock() 을 호출하는 쪽이 공유 리소스를 잡근할 수 있으며, 나중에 Lock()을 호출하는 쪽은 상대편이 Unlock()을 호출할 때까지 대기하게 된다. (Lock/Unlock 으로 제어) 다이얼로그 베이스 프로젝트를 만든다. 1 2 3 ..
MFC 스레드3 UI스레드 메시지 루프를 가지고 있어서 사용자 입력이나 그 밖의 메시지 형태로 전될되는 이벤트를 처리할 수 있다. 예) 응용프로그램 객체 (프로젝트명App) -DOS 콘솔 응용 프로그램 제외 1. CWinThread 클래스로 부터 새로운 클래스를 파생시킨다. 2. 클래스 선언부와 구현부에 각각 DECLARE_DYNCCREATE, IMPLEMENT_DYNCREATE 매크로를 선언한다. 이 매크로를 선언함으로써 실행 시간 객체 정보와 동적 객체 생성 기능을 지원한다. 3. CWinThread 클래스가 제공하는 가상 함수 중 일부를 재정의 한다. CWinThread::InitInstance() 는 반드시 재정의해야 하며, 나머지 함수는 필요에 따라 재정의 한다. 4. AfxBeginThread..