![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чем отличается PostMessage от SendMessage.
IGORYOK © (2003-08-12 21:39:00)
Чем отличается PostMessage от SendMessage. раньше я считал, что ни чем, но когда проверил оказалось одна (первая) передаёт между приложениями сообщения, а вторая нет. Так как же для чего они
Digitman (2003-08-13 10:14:00) [1]
> Verg
мне это известно не хуже чем тебе)
рискни растолковать это автору)
Verg (2003-08-13 09:05:00) [2]
> Digitman © (13.08.03 08:51) [5]
К этом можно добавить еще маленькую деталь:
sendmessage приводит к прямомувызову функции обработки сообщений целевого объекта, кроме случаев, когда поток отправляет сообщение (SendMessage) окну, которое ему не принадлежит (было создано другим потоком). В этом случае происходит как бы смешанный вариант (post-send)message, очередь сообщений ЦО переводится в специальное состояние, а вызывающий поток блокируется до тех пор, пока ЦО не обратится к своей очереди сообщений, в этот момент и происходит обработка того самого сообщения и происходит в контексте потока ЦО. На этом механизме и основан принцип синхронизации потоков наследников TThread из модуля classes, а именно метод synchronize.
Digitman (2003-08-13 08:51:00) [3]
> когда проверил оказалось одна (первая) передаёт между приложениями
> сообщения, а вторая нет
ничего подобного
SendMessage() - синхронная передача сообщения, с ожиданием результата. Вызывающий кодовый поток блокируется на исполнении этой ф-ции до тех пор, пока не получит тот или иной результат : либо результат обработки сообщения оконной ф-цией в целевом кодовом потоке, либо отказ (целевое окно задано неверно, еще/уже не существует и т.п.) со значением результата = 0.
PostMessage() - асинхронная передача сообщения, без ожидания результата (возврат результата обработки сообщения целевой оконной ф-цией здесь не предусмотрен). Вызывающий код.поток не блокируется на исполнении ф-ции, получает управление сразу же после попытки постановки посылаемого сообщения в очередь сообщений целевого окна. Результат исполнения ф-ции = True, если сообщение успешно поставлено в целевую очередь, False - иначе.
Yanis (2003-08-12 23:22:00) [4]
To [3]
Не все же полиглоты, как ты или я. Я нехочу никого обидеть но не все смогут перевести. Хотя ты прав, оригинал есть оригинал.
jack128 (2003-08-12 23:16:00) [5]
> Yanis © (12.08.03 23:11) [2]
Оригинал полезней!! -))
Yanis (2003-08-12 23:11:00) [6]А вот перевод, по сути одно и тоже:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1060709982&n=2
jack128 (2003-08-12 23:03:00) [7]
The SendMessage function sends the specified message to a window or windows. The function calls the window procedure for the specified window and does not return until the window procedure has processed the message. The PostMessage function, in contrast, posts a message to a thread"s message queue and returns immediately.