본문 바로가기

프로그래밍

PostThreadMessage가 실패하는 경우

스레드를 생성하자마자 PostThreadMessage 로 메시지를 넘길 경우 에러값이 1444, ERROR_INVALID_THREAD_ID 로 넘어오게 되어 메시지 전송에 실패하는 경우가 생긴다.

이것은 스레드에서 메시지큐가 바로 생성되지 않아서 제대로된 thread id를 넣었음에도 실패하게 된다.

이런 불상사를 방지하기 위해서 CWinThread에서는 몇가지 편법을 사용한다.

스레드 생성하는 부분에서는
Event 객체를 써서 초기화가 될 때까지 대기하게 되고
스레드 프로시저에서는 초기화가 된 후 SetEvent를 호출하여 스레드를 사용할 수 있는 상태로 만들어졌음을 보장하게 된다.