Re[12]: SendMessage vs PostMessage
От: Kirill_Luzanov  
Дата: 12.03.03 15:36
Оценка:
Здравствуйте, Kirill_Luzanov, Вы писали:


KL> НЕВЕРНО!!! Если поток не вызывает GetMessage или PeekMessage сообщение НИКОГДА не будет обработанно!

KL>SendMessage НЕ ВЫЗЫВАЕТ напрямую оконную процедуру — если бы это было так — то оконная процедура вызывалсь бы
KL>в ТЕКУЩЕМ потоке — а не потоке ВЛАДЕЮЩЕМ очередью сообщений!!!
KL>В WINDOWS ВСЕ СООБЩЕНИЯ ДЛЯ ПОТОКА ОБРАБАТЫАЮТСЯ ТОЛЬКО В САМОМ ПОТОКЕ!
KL>Так что прав — Pek.
Забыл уточнить — SendMessage может вызвать оконную процедуру напрямую ТОЛЬОКО если
она вызывается в родном для окна потоке. Иначе см. выше.
И соотв. слегка изм. псевдокод:
LRESULT SendMessage(HWND hWnd, UINT Msg , WPARAM wParam , LPARAM lParam)
{
   DWORD dwThreadID = System::GetWindowNativeThreadID(hWnd);
   System::MessageQueue* pQueue = System::GetThreadMessageQueue(dwThreadID);
   if(GetCurrentThreadId() == pQueue->GetNativeThredId())
      вызывается оконная процедура
   else
   {
     MSG msg(Msg, wParam, lParam)
     return pQueue->AddSync(&msg);
   }
}
далее смотри мой предыдущий пост...
Think different
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.