mfc 멀티 쓰레드 예제

그러나 Jeffery Ritcher의 고급 Windows는 반환 방법을 사용하는 것이 좋습니다. TerminateThread 또는 ExitThread 함수가 스레드 스택을 제대로 지우지 않습니다. GetThreadTimes는 스레드의 런타임을 찾는 데 사용됩니다. GetCurrentThreadID는 현재 스레드 ID를 얻는 것입니다. 절전 기능은 너무 많은 밀리초 동안 특정 스레드를 절전 모드로 이동합니다. 예를 들어 절전(1000)은 스레드를 1000밀리초 동안 절전 모드로 연결합니다. SwithToThread는 다른 스레드로 전환하는 것입니다. SuspendThread는 다시 시작 스레드의 호출까지 기다립니다. WaitForSingleObject는 특정 스레드가 작업을 완료할 때까지 기다리는 것입니다. WaitForMultipleObject는 여러 이벤트에 사용됩니다.

이러한 함수는 변경 알림, 콘솔 입력, 이벤트, 작업, 뮤텍스, 프로세스, 세마포어, 스레드 및 대기 가능한 타이머와 같은 상황을 기다립니다. 또한 창을 독립적으로 관리할 수 있는 사용자 인터페이스 스레드를 만드는 방법과 사용자 인터페이스 스레드를 초기화하고 수신하는 메시지를 처리하는 데 사용할 클래스를 만드는 세부 사항을 살펴봤습니다. Win32 API는 TerminateThread() 함수를 제공하지만 이 메서드를 사용하면 매우 심각한 결과를 초래할 수 있습니다. 스레드를 정상적으로 종료하는 이전 방법과 달리 TerminateThread()는 할당된 메모리를 정리하기 위한 규정 없이 스레드가 트랙에서 죽은 스레드를 중지합니다. 더 중요한 것은 이러한 방식으로 종료되는 스레드가 시스템을 확정되지 않은 상태로 두는 여러 다른 트랜잭션(예: 장치 드라이버 통신 또는 힙 관리)의 중간에 중단될 수 있다는 것입니다. Windows 95에서는 전체 시스템에 대한 거의 확실한 운명과 동일하지만 Windows NT는 최소한 나머지 프로세스를 저장할 수 있어야 합니다. 두 OS 중 하나에서 잘못된 프로세스는 가너입니다. CreateThread 함수를 사용하여 스레드 우선 순위를 설정합니다. 우리는 GetThreadPriority 및 SetThreadPriority Win32API 함수 또는 코드에서 자유롭게 호출하는 CWinThread 함수에서 스레드 우선 순위를 얻거나 설정합니다.

우선 순위 함수는 BOOL 값을 반환합니다. GetExitCodeThread()에서 반환되는 exit 코드 값에는 스레드가 여전히 실행 중인 경우 STILL_ACTIVE가 포함되거나 스레드가 종료된 경우 스레드가 AfxEndThread()라고 할 때 스레드가 전달한 반환 코드가 포함됩니다. STILL_ACTIVE는 0x103(소수259소수)으로 정의되므로 스레드에서 반환 코드로 사용하지 마십시오. 스레드 클래스는 3장에서 보았듯이 CCmdTarget에서 파생된 다른 클래스와 마찬가지로 메시지 맵을 구현할 수 있습니다. 그러나 특정 창이 아닌 스레드로 직접 전송되는 메시지를 처리하기 위해 특수 메시지 맵 매크로 ON_THREAD_MESSAGE를 사용할 수도 있습니다. CwinThread::PostThreadMessage()를 사용하여 스레드로 직접 메시지를 보낼 수 있습니다. 초보자라고 말함으로써, 나는 C ++ 언어를 배우는 초보자인 사람들을 의미하지 는 않지만 다중 스레드 프로그래밍에서 다소 새로운 사람들을 의미합니다. 이 문서의 주요 내용은 동기화 기술에 있습니다. 따라서이 문서는 동기화에 대한 자습서와 같습니다. 새 스레드는 해당 함수가 반환될 때까지 또는 스레드 내에서 AfxEndThread()를 호출할 때까지 지정된 함수를 계속 실행합니다. 스레드는 실행 중인 프로세스가 종료되는 경우에도 종료됩니다. 이것이 실제 문제를 일으킬 수 있음을 확인하는 것은 어렵지 않습니다.

그러나 이러한 종류의 문제는 스레드가 선점되는 시기의 타이밍에 따라 달라지므로 디버깅하기가 훨씬 더 어렵습니다.

Next Post:
Previous Post: