|
1. 네 여러 곳에서 호출해도 됩니다.
들어온 순서대로 처리되겠죠.
2. UI도 하나의 쓰레드로 돌아갑니다. 그러니 한번에 한가지 일만 할 수 있습니다.
만약 callback 함수에서 새로 쓰레드를 생성하여 돌리지 않는다면
callback 함수를 다 완료한 후에 다음 메시지를 처리합니다.
멀티 쓰레드(작업 쓰레드)를 사용할 경우 GUI와의 동기화를 위해 SendMessage를 사용 할 수 있는데요.
Callback 함수에서 다시 동기화를 위한 추가 작업이 필요하지는 않겠죠...
(Callback 함수에서 사용된 변수들이 다른 쓰레드 에서 사용되지 않는다는 가정하에...)
하나의 쓰레드가 SendMessage를 호출하게 되면 이 메시지가 완전히 수행 될 때 까지
해당 쓰레드는 멈추어 있습니다.
파라도사 님이 쓰신 글 :
: 일반적으로 윈도우시스템에서는
: 이벤트가 발생하여 메인윈도우로 메세지를 보내면 해당되는 callback함수가 수행이 되는데요,
: 이벤트 아이디가 'WM_EVENT_T'라고 가정하고, callbakc함수에서는
: 메세지안에 있는 Payload값에 따라서 Switch/Case문으로 처리를 합니다.
:
: 2가지 질문이 있습니다.
:
: 1. 'WM_EVNET_T'메세지를 여러 곳에서 SendMessage()함수를 통해서 발생을 해도 되는 건가요?
: - 메인윈도우에 전송이 될 터인데, 여기에는 큐형태에 저장이 되는거지요.(?)
: - 그렇다면, 들어온 순서대로 순차적으로 큐에 저장이 되는건가요.
:
: 2. Call back함수가 call이 될 때, 첫번째 call이 되어 수행 중일 때, 다음 메세지가 발생한다면,
: 이때 수행절차가 어떻게 되나요?
: - 처음 메세지를 callback함수가 수행완료된 후에 두번째 메세지에 의해서 수행이 되는 건가요?
: (callback함수가 수행후 종료될때까지 blocking이 된다.)
: 아니면, 새로운 메세지가 올때마다 블락킹이 없이 callback함수가 동시에(약간의 지연 수행)수행이 되는 건가요?
:
: *정리하자면, 어떤 메세지를 여러곳에서 발생시키고, 이 메세지를 하나의 Callback함수에서 순차적으로
: 처리할 수 있느냐 ? 만약에, blocking이 안된다면 callback함수 안에서 blocking을 프로그램적으로
: 처리할 방법이 뭐가 있을까요? While문, Flag 등등.
|