Я читаю код других людей, и их код работает. Я просто чувствую некоторую путаницу по поводу пост-сообщений и цикла сообщений, которые они использовали
#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, и это мой первый пост здесь, если я что-то неправильно понимаю, дайте мне знать
Вы, кажется, вызываете функцию CWnd :: PostMessage, а не функцию API PostMessage. Таким образом, вызов отправляет сообщение в диалог myClass, используя его член HWND, и сообщение будет получено в том же потоке, который выполняет вызов.