PostThreadMessage 썸네일형 리스트형 PostThreadMessage로 SendThreadMessage 구현하기 스레드에서 메시지 처리를 하는 경우 스레드에서 특별히 윈도우를 만들지 않는 이상 PostThreadMessage 밖에 메시지를 보낼 수 있는 방법이 없다. 특별한 경우 SendThreadMessage 같은 걸 사용하고 싶은 경우 Event 객체를 써서 비슷하게 구현할 수 있다. 메지시 전송 부분 enum ThreadMessageFlag { TMF_ASYNC=0, TMF_SYNC }; HANDLE waitMsg = CreateEvent(NULL, TRUE, FALSE, NULL); if(PostThreadMessage(threadId_, WM_THREAD_INITIALIZE, reinterpret_cast(waitMsg), TMF_SYNC)) { if(WaitForSingleObject(waitMsg, M.. 더보기 PostThreadMessage가 실패하는 경우 스레드를 생성하자마자 PostThreadMessage 로 메시지를 넘길 경우 에러값이 1444, ERROR_INVALID_THREAD_ID 로 넘어오게 되어 메시지 전송에 실패하는 경우가 생긴다. 이것은 스레드에서 메시지큐가 바로 생성되지 않아서 제대로된 thread id를 넣었음에도 실패하게 된다. 이런 불상사를 방지하기 위해서 CWinThread에서는 몇가지 편법을 사용한다. 스레드 생성하는 부분에서는 Event 객체를 써서 초기화가 될 때까지 대기하게 되고 스레드 프로시저에서는 초기화가 된 후 SetEvent를 호출하여 스레드를 사용할 수 있는 상태로 만들어졌음을 보장하게 된다. 스레드 생성 루틴 // setup startup structure for thread initialization THRE.. 더보기 이전 1 다음