2017-11-22 1 views
1

작업 스레드가 주 스레드에서 메서드를 호출해야하는 응용 프로그램이 있습니다. win32api.PostThreadMessage (메시지 WM_USER + X 포함)를 통해 사용자 지정 메시지를 보내려하고이 메시지를 받으면 일부 기능이 주 스레드에서 실행되어야합니다. 내가 뭘 찾고, 해당 WM_USER_X 메시지에 메서드를 등록하는 것입니다?MultiThreading : 윈도우의 맞춤 메시지에 해당하는 메인 스레드에 메소드를 등록 할 수 있습니까?

+1

그건 어떻게 작동하지 않습니다. 메소드에 메시지를 등록하지 않습니다. 스레드에 메시지를 게시하는 경우 주 응용 프로그램의 메시지 루프 (및 실행되는 모든 모달 메시지 루프)를 수정해야합니다. 주 스레드에 직접 게시하는 것은 매우 나쁜 생각입니다. 창에 게시하는 것이 더 좋습니다. 그런 다음 해당 창의 창 프로 시저에서 메시지를 처리해야합니다. –

+2

[ "PostThreadMessage에 게시 된 메시지가 사라지는 이유는 무엇입니까?"] (https://blogs.msdn.microsoft.com/oldnewthing/20090930-00/?p=16553)를 참조하십시오. 관용적 인 방법은 주 스레드에서 작업자 스레드로 창 핸들을 전달하는 것입니다. 그런 다음 작업자 스레드는이 창 핸들을 지정하는 일반'PostMessage()를 수행합니다. – zett42

+0

@DavidHeffernan, 맞춤 메시지가있는 창을 만들고 https://www.programcreek.com/python/example/53218/win32con.WM_USER를 통해 메시지를 처리하는 방법을 보았습니다. 여기에서 메시지 맵을 만듭니다 (참조 예 2) 하지만 창을 만들지 않으려면 어떻게해야합니까? – Shady23

답변

-1

RegisterWindowMessage 함수를 보면, 정확히 무엇을하고 있는지 (다른 것과 충돌해서는 안되는 메시지 번호를 제공합니다). 한 가지 단점은 메시지 번호가 상수가 아니지만 프로그램 실행마다 달라 지므로 메시지 루프가 다소 복잡해 지지만 이런 종류의 일에는 가치가 있습니다.

+0

질문은 메시지에 응답하는 코드를 연결하는 방법입니다. 메시지 ID를 얻는 방법이 아닙니다. –

관련 문제