сообщение и цикл сообщений в другой ветке

Я читаю код других людей, и их код работает. Я просто чувствую некоторую путаницу по поводу пост-сообщений и цикла сообщений, которые они использовали

#define MESSAGE XXX //some number
BEGIN_MESSAGE_MAP(myClass, CDialog)
//...
ON_THREAD_MESSAGE(...)
END_MESSAGE_MAP()
... myClass::funcA(...)
{
static HANDLE t = createThread(...., funcB,....)
.....
postmessage(MESSAGE)

}

... myClass::funcB(...)
{
....
while(...)
{
TranslateMessage(&msg);
dispatchMessage(&msg);
}

}

код выглядит так, но с небольшой модификацией

По данным MSDN
когда _In_opt_ HWND hWnd of PostMessage имеет значение null

Функция ведет себя как вызов PostThreadMessage с параметром dwThreadId, установленным в идентификатор текущего потока.

это смущает меня. Кажется, что поток, созданный основным потоком, фактически получает сообщение? кто-нибудь может объяснить это?

Кстати, я новичок в MFC, и это мой первый пост здесь, если я что-то неправильно понимаю, дайте мне знать

1

Решение

Вы, кажется, вызываете функцию CWnd :: PostMessage, а не функцию API PostMessage. Таким образом, вызов отправляет сообщение в диалог myClass, используя его член HWND, и сообщение будет получено в том же потоке, который выполняет вызов.

0

Другие решения


По вопросам рекламы [email protected]