mfc cevent 예제

프로세스는 자체 메모리, 파일 핸들 및 기타 시스템 리소스를 소유하는 실행 중인 프로그램입니다. 개별 프로세스에는 스레드라는 별도의 실행 경로가 포함될 수 있습니다. 그러나 여러 스레드에서 단일 함수를 호출할 수 있으므로 별도의 스레드에 대해 별도의 코드를 찾아볼 수 없습니다. 대부분의 경우 프로세스의 모든 코드 및 데이터 공간은 프로세스의 모든 스레드에서 사용할 수 있습니다. 예를 들어 두 스레드는 동일한 전역 변수에 액세스할 수 있습니다. 스레드는 운영 체제에서 관리하며 각 스레드에는 고유한 스택이 있습니다. 예를 들어 다음 호출에서는 다른 동기화 개체와 달리 커널 모드를 입력할 필요가 없는 한 중요한 섹션이 사용자 모드에서 작동하는지 여부를 검사합니다. 스레드가 중요한 섹션으로 잡힌 코드를 실행하려고 하면 먼저 스핀 차단을 수행하고 지정된 시간 이후에는 커널 모드로 들어가 임계 섹션을 기다립니다. 실제로 임계 섹션은 스핀 카운터와 세마포로 구성됩니다. 전자는 대기 하는 사용자 모드에 대 한, 그리고 나중에 는 커널 모드 대기 (절전)에 대 한.

Win32 API에는 중요한 섹션 개체를 나타내는 CRITICAL_SECTION 구조가 있습니다. MFC에는 CCriticalSection이라는 클래스가 있습니다. 개념적으로 중요한 섹션은 통합 실행에 필요한 소스 코드 섹터, 즉 코드의 해당 부분을 실행하는 동안 다른 스레드에 의해 실행이 중단되지 않도록 보장해야 합니다. 단일 스레드에 공유 리소스 사용의 독점권을 부여해야 하는 경우 이러한 코드 섹터가 필요할 수 있습니다. 간단한 경우는 두 개 이상의 스레드에서 전역 변수를 사용하는 것입니다. 예: 사용할 동기화 액세스 클래스를 선택하는 것이 더 간단합니다. 응용 프로그램이 단일 제어 리소스에만 액세스하는 데 관심이 있는 경우 CSingleLock을 사용합니다. 제어된 여러 리소스 중 하나에 액세스해야 하는 경우 CMultiLock을 사용합니다. 예제 1에서 CSingleLock은 각각의 경우에 특정 시간에 하나의 리소스만 필요하기 때문에 사용되었을 것입니다. 아래 OnStart() 처리기는 대화 상자의 시작 단추에 매핑됩니다. 그 작업은 타이머와 작업자 스레드를 시작하는 것입니다.

예를 들어, THREAD_PRIORITY_LOWEST로 우선 순위를 설정하면 AfxBeginThread()의 세 번째 매개변수를 변경하여 작업자 스레드의 우선 순위를 변경할 수 있습니다. 아래와 같이 OnStart()를 변경합니다. 다중 스레드 환경에서 각 스레드에는 고유한 로컬 스레드 스택 및 레지스터가 있습니다. 여러 스레드가 읽기 및 쓰기를 위해 동일한 리소스에 액세스하는 경우 값이 올바른 값이 아닐 수 있습니다. 예를 들어 응용 프로그램에 파일에서 콘텐츠를 읽기 위한 스레드와 파일을 작성하는 스레드가 두 개의 스레드가 있다고 가정해 보겠습니다.

Mentalny Teatr Hipnozy > mfc cevent 예제