![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кто ждет результата SendMessage с WM_CopyData? [D7, WinXP]
Aleksandr. © (2005-01-28 17:28:00)В смысле, нить, который его посылает, или основная нить программы?
А то захотелось мне для большей надежности узнать, каков результат отправленного сообщения, но увидел я, что посылающее окно становится недоступным во время ожидания результата. Вот и думаю, есть ли смысл отдельные потоки для отсылок WM_CopyData выделять, тем более, что слаб я в тематике, как там в Execute всякие PeekMessage или что там обрабатывать. И, кстати, в какой момент обработки получателем результат сообщения возвращается назад? Когда получатель делает
Boolean(Msg.Result):=true
?
Digitman (2005-01-28 18:40:00) [1]
> каким образом окно-получатель вдруг да станет ждать результата
> получаемого сообщения?
никаким.
нет никаких "окон-получателей".
Есть трэды, создавшие окна, которые являются потенциальными адресатами отправляемых им сообщений.
Каждый трэд волен/обязан свою собственную очередь сообщений.
За ожидание/выборку/диспетчеризацию/обработку ВСЕХ сообщений, адресованных либо трэду, либо окнам им созданным, ответсвенен сам трэд.
Очередь сообщений самому трэду и окнам, им созданным, едина, отдельна для него и ассоциирована именно с ДАННЫМ трэдом.
Очередей трэд-сообщений в системе существует не более чем самих трэдов.
Каждый отдельный трэд может иметь, а может и не иметь свою индивидуальную очередь сообщений.
Как только трэд выполнил хотя бы однократно CreateWindow{Ex}, система создает и ассоциирует с дан.трэдом индивидуальную очередь сообщений.
Та же самая очередь сообщений создается системой и ассоциируется с дан.тредом как только последний выполнит любую из ф-ций, обращающихся к этой очереди (Peekmessage, WaitMessage, GetMessage и т.п.)
За ожидание/выборку/диспетчеризацию/обработку сообщений из своей же очереди ответственен сам трэд - владелец очереди. за него это никто не сделает.
Если в поле адресата сообщения hWnd <> 0, то трэд волен или обязан выполнить как минимум DispatchMessage(), что приведет к непоср.передаче упр-я оконной ф-ци того окна, которому адресовано сообщение. В противном случае трэд волен интерпретировать сообщение как ему вздумается.
Aleksandr. (2005-01-28 17:46:00) [2]Digitman © :
Объясните мне, каким образом окно-получатель вдруг да станет ждать результата получаемого сообщения? Это ведь в отправителе вызывается
if Boolean(SendMessage(rHandle,WM_CopyData,Handle,LParam(@CSD)))
Digitman (2005-01-28 17:32:00) [3]
> Кто ждет результата SendMessage с WM_CopyData?
я. жду. иногда. представь себе.
> В смысле, нить, который его посылает, или основная нить
> программы?
"В смысле" нить, которой адресовано сообщение.
Либо "В смысле" окно, которому адресовано сообщение, которое создано конкретной нитью и БЕЗ которой сие окно НЕ имеет право на существование.