>일반적인 문제 >스레드 간 통신의 여러 가지 방법

스레드 간 통신의 여러 가지 방법

hzc
hzc원래의
2020-07-01 14:00:1217197검색

스레드 간 통신 방법에는 다음이 포함됩니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.