스레드 간 통신 방법에는 다음이 포함됩니다. 1. 전역 변수, 프로세스의 스레드 간 메모리 공유(일반적인 통신 방법 및 상호 작용 방법) 2. 메시지 메시지 메커니즘 3. CEvent 개체, CEvent는 MFC의 일부입니다. 개체는 CEvent의 트리거링 상태를 변경하여 스레드 간 통신을 실현할 수 있습니다.
멀티 스레드 통신에는 세 가지 주요 방법이 있습니다.
1. 전역 변수
프로세스에서 스레드 간 메모리 공유가 더 일반적으로 사용되는 통신 방법이자 상호 작용 방법입니다.
참고: 컴파일러가 이 변수를 최적화하지 못하도록 전역 변수를 정의할 때 휘발성을 사용하는 것이 가장 좋습니다.
2. 메시지 메시지 메커니즘
일반적으로 사용되는 메시지 통신에는 PostMessage와 PostThreadMessage라는 두 가지 주요 인터페이스가 있습니다.
PostMessage는 기본 창에 메시지를 보내는 스레드입니다. PostThreadMessage는 두 스레드 간의 통신 인터페이스입니다.
2.1.PostMessage()
함수 프로토타입:
B00L PostMessage (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
매개변수:
hWnd: 윈도우 프로그램이 메시지를 수신하는 윈도우의 핸들 메시지. 특정 의미를 지닌 두 가지 값을 취할 수 있습니다:
HWND.BROADCAST: 메시지는 유효하지 않거나 보이지 않는 비소유 창, 가려진 창
및 팝업 창을 포함하여 시스템의 모든 최상위 창으로 전송됩니다. 메시지는 하위 창으로 전송되지 않습니다.
NULL: 이 함수의 작동은 dwThread 매개변수가 현재 스레드의 식별자로 설정된 PostThreadMessage 함수를 호출하는 것과 동일합니다.
메시지: 보낼 메시지를 지정합니다.
wParam: 메시지별 추가 정보를 지정합니다.
IParam: 추가 메시지별 정보를 지정합니다.
반환 값: 함수 호출이 성공하면 반환 값은 0이 아닙니다. 함수 호출이 실패하면 반환 값은 0입니다.
MS는 메시지 간 통신을 위한 SendMessage 메서드인 SendMessage()도 제공합니다. 이 메서드와 PostMessage의 차이점은 다음과 같습니다.
SendMessage는 동기식이지만 PostMessage는 비동기식입니다. SendMessage는 전송된 메시지가 반환되기 전에 실행될 때까지 기다려야 합니다.
2.2.PostThreadMessage()
PostThreadMessage 메소드는 지정된 스레드에 메시지를 보낼 수 있습니다.
함수 프로토타입: BOOL PostThreadMessage (DWORD idThread, UINT Msg, WPARAM wParam, LPARAM lParam)
매개변수는 ThreadId를 제외하고 기본적으로 PostMessage와 동일합니다.
대상 스레드는 GetMessage() 메서드를 통해 메시지를 받습니다.
참고: 이 방법을 사용하는 경우 대상 스레드에는 이미 자체 메시지 대기열이 있어야 합니다. 그렇지 않으면 ERROR_INVALID_THREAD_ID 오류가 반환됩니다.
PeekMessage()를 사용하여 스레드에 대한 메시지 대기열을 만들 수 있습니다.
3. CEvent 객체
CEvent는 CEvent의 트리거링 상태를 변경하여 스레드 간 통신 및 동기화를 달성할 수 있는 MFC의 객체입니다.
위 내용은 스레드 간 통신의 여러 가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!