Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Зафиксировать обработку функции.


immi ©   (2006-10-25 21:50:00) 

Идиотское название темы, не знаю как назвать.

Есть некий класс, который осуществляет функцию обмена сообщениями через сеть.
Класс осуществляет все разборы пакетов и т.п.
У класса есть процедура SendMessage(W, T: string); W - получатель; T - сообщение.
Она просто формирует данные специальным образом и отправляет в сокет.

Если же с удаленной стороны приходит сообщение на нашу сторону, то на этот случай у клaсса есть это:

property OnMessageRecv: ...
OnMessageRecv [W, T: string]  W - отправитель; T - сообщение.

Ну т.е. это примитивная система обмена сообщениями по собственномму протоколу.

А теперь есть задача, создать возможность отклика на полученное сообшение. ПРиходит сообщение, мы сразу же делаем маленький пакет и отправляем его удаленному пользователю.

Необходимо что-то вроде некоего подобия "блокирующих сокетов в отдельном потоке", но для отправки сообщений:

Например делаем так. Шлем сообщение:

if SendMessageEx('mynickname1', 'hello!') then
good;
else
notgood;

И нужно каким-то образом остановить вызов на выполнении этой функции, дождавшись с другой стороны пакета. И если оно не пришло по таймауту -- то false. При ожидании ответа остальная работа должна продолжаться, т.е. можно отправлять другие сообщения и принимать.

Как такое осуществить?


Anatoly Podgoretsky   (2006-10-26 11:54:00) [1]


> Нееее, я не говорю про сокеты: я привел пример такой, что
> сокеты блокируют дальнейшие операции пока не выполнят свою.
>  Вот и мне подобная штука нужна, но не в сокетах.

while true do;
Вот пока это не закончится, будет блокирование, вот по подобному алгоритму и работай, если конечно Инди не будет мешать, а она наверно будет мешать.


Сергей М.   (2006-10-26 10:48:00) [2]


> immi   (26.10.06 10:32) [9]


Разговор будет беспредметен, пока ты не уточнишь, какой конкретно транспортный механизм ты используешь в своем классе - гнезда, программные каналы, что-то иное ...


immi   (2006-10-26 10:32:00) [3]

Хммм... "неблокирующую транспортную логику", вот в это всё и упирается, т.е. я просто не понимаю. Поэтому и пишу в "начинающим".


Сергей М.   (2006-10-26 09:57:00) [4]


> immi   (26.10.06 09:50) [7]


Ну тогда ничто не мешает реализовать в нем неблокирующую транспортную логику


immi   (2006-10-26 09:50:00) [5]

Нет, не именно подтверждение доставки, нужен спецефический отклик.
Класс мой.


Сергей М.   (2006-10-26 09:46:00) [6]


> immi   (25.10.06 21:50)
> Есть некий класс


Твойкласс ? Т.е. его разработал именно ты ?


StriderMan   (2006-10-26 09:11:00) [7]

если задача - сделать подтверждение доставки, то в протоколе TCP оно уже сделано


immi   (2006-10-26 09:07:00) [8]

Нееее, я не говорю про сокеты: я привел пример такой, что сокеты блокируют дальнейшие операции пока не выполнят свою. Вот и мне подобная штука нужна, но не в сокетах.


Zeqfreed   (2006-10-25 23:06:00) [9]

Э-э-м. Асинхронные (неблокирующие) сокеты + select? Там и таймаут и все что душа пожелает.


immi   (2006-10-25 22:56:00) [10]

Какая дискриминация? Удаленному -- не означает удаление, как операцию. А удаленному -- эначит противоположному пользователю, пользователю от которого пришел пакет.

Пример с сокетами. Блокирующие сокеты в общем потоке ожидают выполнение операции и только по завершении передают управление на следующую строчку. В отдельном потоке, соответственно ожидание завершения операции будет происходить отдельно от основного потока, там самым не мешаю остальным действиям другого потока.

Пример с сокетами -- не именно пример для сокетов, а как пример именно этой опирации ожидания, блокирования.


Leonid Troyanovsky   (2006-10-25 22:11:00) [11]


> immi   (25.10.06 21:50)  


> А теперь есть задача, создать возможность отклика на полученное
> сообшение. ПРиходит сообщение, мы сразу же делаем маленький
> пакет и отправляем его удаленному пользователю.

Дискриминация - раз пользователь удален, то для него - лишь
маленький пакет.

> Необходимо что-то вроде некоего подобия "блокирующих сокетов
> в отдельном потоке", но для отправки сообщений:

Т.е., неблокирующие сокеты в общем потоке не способны
на некое подобие, в т.ч. для отправки?

> Например делаем так. Шлем сообщение:
> И нужно каким-то образом остановить вызов на выполнении
> этой функции, дождавшись с другой стороны пакета. И если
> оно не пришло по таймауту -- то false. При ожидании ответа
> остальная работа должна продолжаться, т.е. можно отправлять
> другие сообщения и принимать.

> Как такое осуществить?

SendMessage.

Regards, LVT.


Наверх

Титульная страница Поиск, карта сайта Написать письмо