mfc waitformultipleobjects 예제

각 스레드에는 고유한 스택이 있습니다(스레드 대 프로세스 참조). 아래 예제에서 CreateThread() 함수의 2번째 인수인 stackSize 매개 변수를 사용하여 새 스레드 스택의 크기를 바이트로 지정할 수 있습니다. 이 정수 값이 0이면 스레드에는 만드는 스레드와 크기가 같은 스택이 제공됩니다. 스레드를 종료하는 방법에는 여러 가지가 있습니다. 그러나 권장되는 방법은 스레드가 실행하도록 지시된 함수를 종료하는 것입니다. 다음 예제에서는 스레드가 ID를 출력한 다음 종료합니다. 스레드가 종료되면 _beginthread()에 대한 호출로 반환된 핸들이 유효하지 않거나 다시 사용됩니다. 따라서 스레드의 상태를 쿼리하거나 스레드에 대한 핸들이 원래 가리키는 동일한 스레드의 핸들이라고 확신할 수 없습니다. 다음 예제에서는 이 문제를 보여 줍니다: 사용 하려면 WFMOFHandler에서 클래스 파생 선언 하 고 아래 예제에 표시 된 대로 추적 하려는 상태 대기 핸들을 등록 합니다. 등록은 AddWaitWait 메서드를 통해 수행됩니다. 이 메서드는 두 개의 인수를 사용 합니다-대기 핸들 및 핸들 신호 때 호출 될 해당 처리기 함수입니다. 처리기 함수는 함수 개체로 제공되어야 합니다.

명시적으로 만든 함수 개체를 제공하거나 STL std::bind() 기능을 사용하여 즉시 구성할 수 있습니다. 이 두 가지 사용법은 모두 다음과 같습니다: 다중 스레드 환경에서 각 스레드에는 고유한 로컬 스레드 스택 및 레지스터가 있습니다. 여러 스레드가 읽기 및 쓰기를 위해 동일한 리소스에 액세스하는 경우 값이 올바른 값이 아닐 수 있습니다. 예를 들어 응용 프로그램에 파일에서 콘텐츠를 읽기 위한 스레드와 파일을 작성하는 스레드가 두 개의 스레드가 있다고 가정해 보겠습니다. 쓰기 스레드가 쓰기를 시도하고 읽기 스레드가 동일한 데이터를 읽으려고 하면 데이터가 손상될 수 있습니다. 이 경우 파일 액세스를 잠급하려고 합니다. 스레드 동기화에는 두 단계가 있습니다. 신호 및 비 신호. 고정 형식 시그니처의 함수/메서드 포인터 대신 함수 개체를 사용하면 유연성이 매우 커합니다. 대기 핸들 처리기로 바인딩할 수 있는 메서드 또는 해당 인수의 형식에 대한 제한은 거의 없습니다.

Comments are closed