ccriticalsection 예제

    위에서 보여 주는 예제의 문제는 인간이 종종 읽기를 기대하는 내용을 읽기 때문에 그들을 찾는 것이 어렵다는 것입니다 (이것은 우리가 모양과 텍스트를 처리하는 방법에 내장 된 예측 패턴 인식의 일부입니다). 결과적으로 오류가 바로 보고 표시되지 않을 수 있지만 다음에 코드에 올 때 오류가 표시 될 수 있습니다 (그것에 대해 모두 잊어 버렸습니다). 예를 들어 다음 호출은 프로세스 [hProcess 설명자로 식별됨]가 실행 중인지 여부를 검사합니다. 일반적인 목적은 동기화를 지원하는 것입니다. 나중에 이 기사를 통해 소개해 드립니다. 프로세스 및 스레드 개체와 같은 동기화 매체로 사용할 수 있는 다른 개체가 있습니다. 예를 들어, 지정된 프로세스 또는 스레드가 실행을 완료했는지 여부를 결정하는 프로그래머가 사용할 수 있습니다. 이 함수는 먼저 이벤트가 작업 스레드에 죽음에 대해 알리는 신호를 받은 다음 WaitForSingleObject를 사용하여 나중에 완전히 소멸될 때까지 각 작업자 스레드에 대한 기본 스레드 대기를 만듭니다. 이렇게하려면 해당 스레드가 소멸된 경우에도 유효한 CWinThread 포인터가 있어야합니다. 이전 단계에서 CWinThread 개체에서 자동 삭제 속성을 제거한 이유입니다. 작업자 스레드가 종료되는 즉시 for 루프의 두 번째 줄은 해당 C++ 개체를 파괴합니다. 각 반복에서 WaitForSingleObject에 대한 호출이 수행되므로 사용자 모드에서 커널 모드로 들어가기만 하면 됩니다.

    예를 들어 10번의 반복의 경우 ~ 10000개의 프로세서 주기가 낭비됩니다. 이 순간을 극복하기 위해 WaitForMultipleObjects를 사용할 수 있습니다. 이 경우 C-스레드 설명자가 필요합니다. 따라서 위의 for 루프를 다음 코드로 대체할 수 있습니다. 또한 작업을 시작하기 위해 해당 이벤트를 기다리는 두 개의 작업 스레드가 있습니다. 세 번째 스레드가 해당 개체에 대해 SetEvent를 호출하는 즉시 이 두 스레드에서 하나와 하나만 스레드(아무도 정확히 어느 스레드를 수신할지 말할 수 있음)이 알림을 수신하고 이후에 이벤트가 두 번째 를 허용하지 않는 비신호 상태가 됩니다. 스레드를 사용하여 이벤트를 파악할 수 있습니다.