목차
1.1 메시지 대기열
1.2 메시지 대기열 유형
1.3 대기열 메시지 및 대기열이 아닌 메시지
2. 메시지 루프 및 GetMessage/PeekMessage
2.1 메시지 루프
2.2 GetMessage 및 PeekMessage
" >2.3 GetMessage/PeekMessage获取消息的过程
endMessage和PostMessage" >三、SendMessage和PostMessage
운영 및 유지보수 창문 운영 및 유지보수 Win32 SDK 기초 (11) 메시지 큐 및 GetMessage/PeekMessage, SendMessage/Postmesage에 대한 자세한 설명

Win32 SDK 기초 (11) 메시지 큐 및 GetMessage/PeekMessage, SendMessage/Postmesage에 대한 자세한 설명

Jun 06, 2017 am 10:09 AM

1. MessageQueue

1.1 메시지 대기열

메시지 대기열은 메시지를 저장하는 데 사용되는 대기열입니다. 모든 창 프로그램에는 메시지 대기열이 있으며 프로그램은 메시지를 얻을 수 있습니다. 대기열.

1.2 메시지 대기열 유형

시스템 메시지 대기열: 운영 체제에서 유지 관리하는 메시지 대기열로, 마우스 및 키보드 메시지 등과 같이 시스템에서 생성된 메시지를 저장합니다.

프로그램 메시지 큐: 각 애플리케이션(스레드)에 속하며 애플리케이션에 의해 유지되는 메시지 큐입니다.

마우스, 키보드 등의 메시지가 발생하면 먼저 시스템 메시지 큐에 메시지가 저장되고, 운영체제는 저장된 메시지를 기반으로 해당 창의 메시지 큐를 찾아 메시지를 시스템 메시지 큐에 전달한다. 창의 메시지 큐.

1.3 대기열 메시지 및 대기열이 아닌 메시지

대기열 메시지: 메시지가 전송된 후 먼저 대기열에 들어간 다음 메시지 루프 를 통해 획득됩니다. 일반적인 대기열 메시지: 키보드, 마우스, timer메시지 등

비대기열 메시지: 메시지 전송 후 창의 메시지 처리 기능을 직접 찾아 메시지 대기열을 거치지 않고 메시지 처리 기능을 호출하여 처리합니다. 일반적인 비큐 메시지: WM_PAINT, WM_SIZE 등

2. 메시지 루프 및 GetMessage/PeekMessage

2.1 메시지 루프

일반적인 메시지 루프는 다음과 같습니다.

void Message(HWND hWnd)  
{  
	MSG nMsg = { 0 };
	while (GetMessage(&nMsg, hWnd, 0, 0))  
	{  
		TranslateMessage(&nMsg);  
		DispatchMessage(&nMsg);  

		if(nMsg.message == WM_PAINT)
		{
			char buff[30]={};
			sprintf(buff,"处理消息%d\n",nMsg.message);
			WriteConsole(hOutput,buff,sizeof(buff),NULL,NULL);
		}
	}  
}
로그인 후 복사

GetMessage/PeekMessage: 프로그램의 메시지 대기열에서 메시지를 가져옵니다.

TranslateMessage: 키보드의 키 누르기 등의 메시지를 문자 메시지로 번역합니다.

DispatchMessage: 번역된 메시지를 프로그램의 메시지 대기열에 다시 넣습니다.

2.2 GetMessage 및 PeekMessage

GetMessage(
LPMSG lpMsg,
HWND hWnd,
UINT wMsgFilterMin,
UINT wMsgFilterMax
)
로그인 후 복사

lpMsg: 스레드의 메시지 대기열에서 메시지 정보를 받는 MSG 구조에 대한 포인터입니다. hWnd: 메시지를 얻은 창의 핸들입니다. 값이 NULL이면 GetMessage는 호출 스레드에 속한 모든 창에 대한 메시지를 검색하고 스레드 메시지는 PostThreadMessage를 통해 호출 스레드로 전송됩니다. wMsgFilterMin: 검색할 최소 메시지 값을 지정하는
정수
입니다. wMsgFilterMax: 검색할 최대 메시지 값을 지정하는 정수입니다. 반환 값: 함수가 WM_QUIT 이외의 다른 메시지를 받으면 0이 아닌 값을 반환합니다. 함수가 WM_QUIT 메시지를 받으면 반환 값은 0입니다. 오류가 발생하면 반환 값은 -1입니다. 예를 들어 hWnd가 잘못된 창 핸들이거나 lpMsg가 잘못된 포인터인 경우입니다. 더 많은
오류 정보
를 얻으려면 GetLastError 함수를 호출하세요.

lpMsg: 메시지 정보를 수신하기 위한 MSG 구조 포인터입니다.

hWnd: 메시지가 확인된 창 핸들입니다.

wMsgFilterMin: 확인할 메시지 범위의 첫 번째 메시지를 지정합니다.
wMsgFilterMax: 확인할 메시지 범위의 마지막 메시지를 지정합니다.
wRemoveMsg: 메시지 처리 방법을 결정합니다. 이 매개변수는 다음 값 중 하나를 사용할 수 있습니다.

값 의미 PM_NOREMOVE메시지는 대기열에서 제거되지 않습니다.

PM_REMOVE

PeekMessage가 처리된 후 메시지가 대기열에서 제거됩니다.

PM_NOYIELD

이 플래그는 시스템이 호출 프로그램이 유휴 상태가 될 때까지 기다리는 스레드를 해제하지 않도록 합니다. PM_NOYIELD는 PM_NOREMOVE 또는 PM_REMOVE로 자유롭게 결합될 수 있습니다.


GetMessage和PeekMessage的主要区别在于:GetMessage是阻塞函数,它会在消息循环中会一直阻塞直到消息队列中出现了消息可以被获取,而PeekMessage是非阻塞函数,不管有没有获取到消息队列中的消息,它都会返回。PeekMessage更多用来检测消息队里中是否有消息,它的最后一个参数可以用来指定获取到消息后要不要把消息从消息队列中移除,通常情况下通过PeekMessage检测到消息队列有消息之后,再调用GetMessage区获取。

2.3 GetMessage/PeekMessage获取消息的过程

1、先在程序的消息队列中查找消息,如果有队列消息,就取出消息。

2、如果程序的消息队列中没有消息,向系统的消息队列获取属于本程序的消息。如果系统的消息队列中有属于本程序的消息,系统的消息队列会将消息分发到本程序的消息队列中。

3、如果系统的消息队列也没有消息,检查窗口需要绘制的区域是否需要重绘,如果发现有需要重绘的区域,产生WM_PAINT消息。

4、如果没有重新绘制区域,检查是否具有到时的定时器,如果有产生WM_TIMER定时器消息。

5、如果没有到时的定时器,整理程序的资源、内存等等。

三、SendMessage和PostMessage

LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM IParam
)
로그인 후 복사

hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
Msg:指定被发送的消息。
wParam:指定附加的消息特定信息。
IParam:指定附加的消息特定信息。

返回值:返回值指定消息处理的结果,依赖于所发送的消息。

BOOL WINAPI PostMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
로그인 후 복사

hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:
HWND_BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、 被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口
NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样
Msg:指定被寄送的消息。
wParam:指定附加的消息特定的信息。
LParam:指定附加的消息特定的信息。
返回值:如果函数调用成功,返回非零,否则函数调用返回值为零

1、SendMessage

       发送消息到指定的窗口,并等候对方将消息处理,为阻塞函数,获取消息的执行结果后返回。主要需要发送非队列消息,发送的消息不经过消息队列。

2、PostMessage

        发送消息到程序的消息队列,不管消息有没有被处理都会立即返回,用于队列消息的发送

위 내용은 Win32 SDK 기초 (11) 메시지 큐 및 GetMessage/PeekMessage, SendMessage/Postmesage에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Windows 11 22H2는 더 많은 Win32 데스크톱 앱에 운모/아크릴 디자인을 제공합니다. Windows 11 22H2는 더 많은 Win32 데스크톱 앱에 운모/아크릴 디자인을 제공합니다. Apr 14, 2023 pm 04:58 PM

Windows 11의 기본 앱(예: 파일 탐색기) 및 기타 셸 앱은 기본적으로 둥근 모서리와 Fluent 디자인 요소(예: 아크릴)를 사용합니다. 둥근 모서리 외에도 Windows 11의 또 다른 중요한 디자인 특징은 앱의 배경색을 바탕 화면과 일치시키는 운모와 같은 소재입니다. 운모는 아크릴과 비슷하지만 작동 방식이 약간 다릅니다. Microsoft가 설명했듯이 Windows Mica Materials는 배경을 앱과 정렬하여 "색상 계층 구조"를 만듭니다.

Windows 11의 Trojan/win32.casdet Rfn Windows 11의 Trojan/win32.casdet Rfn Apr 14, 2023 pm 02:49 PM

바이러스 백신 소프트웨어는 때때로 Windows 32 노트북에서 Trojan/win11.casdet rfn이라는 경고를 표시할 수 있습니다. PC가 트로이목마 악성코드에 감염되어 오작동을 일으킨다는 의미입니다. 다행히 아래에 설명된 대로 이 문제를 해결할 수 있는 몇 가지 방법이 있습니다. 또한 cdn.districtm.io가 팝업/바이러스/악성 프로그램인지 여부에 대한 자세한 가이드에 관심이 있으실 수 있습니다. Trojan/win32.casdet rfn은 무엇입니까? Trojan/win32.casdet rfn은 시스템을 오버런하고 프로세스를 죽일 수 있는 심각한 트로이 목마 바이러스 감염입니다.

win32와 win64의 차이점은 무엇입니까 win32와 win64의 차이점은 무엇입니까 May 29, 2023 pm 05:22 PM

win32와 win64의 차이점은 다음과 같습니다. 1. win32는 Microsoft Windows 운영 체제의 32비트 환경을 의미하고 win64는 Microsoft Windows 운영 체제의 64비트 버전을 의미하며 32보다 안정적이고 빠릅니다. -bit 버전 2. win32는 최대 2G의 메모리를 지원합니다. win64는 4G 이상의 메모리를 보유해야 합니다. 3. win64는 64비트 프로세서를 지원하지만 win32는 이를 완전히 지원할 수 없습니다. 4. win32는 단순성을 추구하지만, win64는 성능을 추구합니다.

Microsoft, Windows 11용 새 OneNote 디자인 테스트 시작 Microsoft, Windows 11용 새 OneNote 디자인 테스트 시작 Apr 19, 2023 pm 08:01 PM

2021년 8월, Microsoft는 여러 버전의 메모 작성 앱을 하나의 노력으로 통합함에 따라 Windows 10 및 Windows 11의 OneNote가 앞으로 몇 달 안에 일련의 주요 기능 업데이트를 받을 것이라고 약속했습니다. 고객의. OneNote는 지난 몇 년 동안 많은 변화를 겪었습니다. 2018년에 Microsoft는 사람들이 UWP 버전의 OneNote를 사용하기를 정말로 원했을 때 사전 설치된 Office 앱과 함께 기능이 풍부한 원본 버전의 OneNote를 번들로 묶는 것을 중단했습니다. 대신 Microsoft는 UWP 클라이언트만 제공하고 최신 버전에 새로운 기능을 추가했습니다. Microsoft는 나중에 변경했습니다.

Microsoft는 Windows Defender의 Behavior:Win32/Hive.ZY 오류에 대한 수정 사항을 출시했습니다. Microsoft는 Windows Defender의 Behavior:Win32/Hive.ZY 오류에 대한 수정 사항을 출시했습니다. Apr 28, 2023 pm 04:01 PM

Microsoft 관계자는 Google Chrome, ChromiumEdge, Discord 및 기타 여러 응용 프로그램이 Microsoft 내장 바이러스 백신 소프트웨어 "WindowsDefender"에 의해 "Behavior:Win32/Hive.ZY"로 표시되었다는 광범위한 보고를 확인했습니다. 거대 기술 기업은 성명을 통해 앞으로 몇 시간 안에 모든 사람에게 배포될 수정 사항을 작업 중이라고 확인했습니다. 그렇다면 "Behavior:Win32/Hive.ZY"는 정확히 무엇입니까? Microsoft의 보안 포털에 게시된 문서에 따르면 "Behavior:Win32/Hive.ZY"라고 표시된 모든 파일은

Windows 11용 Microsoft Store의 새로운 기능은 무엇인가요? Windows 11용 Microsoft Store의 새로운 기능은 무엇인가요? Apr 28, 2023 pm 06:13 PM

Microsoft는 Microsoft Store에 많은 새로운 기능을 추가하고 있습니다. Windows를 사용하는 모든 사람을 위해 더 나은 스토어를 만들기 위한 회사의 지속적인 노력은 최종 사용자와 개발자 모두에게 도움이 될 것입니다. 이러한 변경 사항의 가장 큰 특징 중 하나는 Windows 11 Microsoft Store의 새로운 "앱 복원" 기능입니다. 사용자의 Microsoft 계정에 연결되므로 새 Windows 11 PC에 로그인한 후 몇 번의 클릭만으로 애플리케이션을 자동으로 복원할 수 있습니다. "고객이 새 PC로 빠르고 원활하게 전환할 수 있도록 곧

Windows Defender 동작 수정 방법: Win32/Hive.ZY 경고 Windows Defender 동작 수정 방법: Win32/Hive.ZY 경고 May 06, 2023 am 08:04 AM

많은 Windows 11 및 10 사용자는 "동작: Win32/Hive.ZY" 위협이 감지되었다는 Windows Defender의 경고 알림을 보고 어려움을 겪고 있습니다. 보고서에 따르면 이 Windows Defender 경고는 사용자가 Google Chrome 또는 Chromium Edge, Whatsapp, Discord 및 Spotify와 같이 일반적으로 사용되는 일부 응용 프로그램을 열려고 할 때 트리거됩니다. PC에서 이 위협을 차단했더라도 다음에 영향을 받는 이 응용 프로그램을 열면 MicrosoftDefenderAntivi 메시지가 표시됩니다.

Win32 그래픽 디자인 소프트웨어 Canva, 거대 Adobe에 도전할 무료 AI 도구 출시 Win32 그래픽 디자인 소프트웨어 Canva, 거대 Adobe에 도전할 무료 AI 도구 출시 Mar 05, 2024 pm 04:34 PM

최근 뉴스에 따르면 Canva는 Adobe의 Firefly와 경쟁하기 위해 일련의 AI 이미지 도구 기능을 출시했습니다. 이 기능은 직장에서 콘텐츠 제작 과정을 단순화하여 디자인 전문가가 아닌 사람들도 콘텐츠를 더 쉽고 효율적으로 만들 수 있도록 하는 것을 목표로 합니다. , 그래픽 디자이너가 미션 크리티컬 작업에 집중하고 시장에서 Adobe의 지배력에 도전할 수 있도록 해줍니다. 보고서에 따르면 Canva의 Visual Worksuite는 사용자에게 조직의 시각적 정체성과 일관성을 유지하는 데 도움이 되는 도구 세트를 제공하는 것을 목표로 하는 새로운 BrandHub를 통합했습니다. 사용자는 이 도구를 사용하여 회사 문화 정보(예: 로고, 글꼴, 색상 및 통합 디자인 스타일)가 포함된 BrandKit(브랜드 IP 도구 키트)를 만들 수 있습니다.

See all articles