Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизЗафиксировать обработку функции. Найти похожие ветки
← →
immi (2006-10-25 21:50) [0]Идиотское название темы, не знаю как назвать.
Есть некий класс, который осуществляет функцию обмена сообщениями через сеть.
Класс осуществляет все разборы пакетов и т.п.
У класса есть процедура SendMessage(W, T: string); W - получатель; T - сообщение.
Она просто формирует данные специальным образом и отправляет в сокет.
Если же с удаленной стороны приходит сообщение на нашу сторону, то на этот случай у клaсса есть это:
property OnMessageRecv: ...
OnMessageRecv [W, T: string] W - отправитель; T - сообщение.
Ну т.е. это примитивная система обмена сообщениями по собственномму протоколу.
А теперь есть задача, создать возможность отклика на полученное сообшение. ПРиходит сообщение, мы сразу же делаем маленький пакет и отправляем его удаленному пользователю.
Необходимо что-то вроде некоего подобия "блокирующих сокетов в отдельном потоке", но для отправки сообщений:
Например делаем так. Шлем сообщение:
if SendMessageEx("mynickname1", "hello!") then
good;
else
notgood;
И нужно каким-то образом остановить вызов на выполнении этой функции, дождавшись с другой стороны пакета. И если оно не пришло по таймауту -- то false. При ожидании ответа остальная работа должна продолжаться, т.е. можно отправлять другие сообщения и принимать.
Как такое осуществить?
← →
Leonid Troyanovsky © (2006-10-25 22:11) [1]
> immi (25.10.06 21:50)
> А теперь есть задача, создать возможность отклика на полученное
> сообшение. ПРиходит сообщение, мы сразу же делаем маленький
> пакет и отправляем его удаленному пользователю.
Дискриминация - раз пользователь удален, то для него - лишь
маленький пакет.
> Необходимо что-то вроде некоего подобия "блокирующих сокетов
> в отдельном потоке", но для отправки сообщений:
Т.е., неблокирующие сокеты в общем потоке не способны
на некое подобие, в т.ч. для отправки?
> Например делаем так. Шлем сообщение:
> И нужно каким-то образом остановить вызов на выполнении
> этой функции, дождавшись с другой стороны пакета. И если
> оно не пришло по таймауту -- то false. При ожидании ответа
> остальная работа должна продолжаться, т.е. можно отправлять
> другие сообщения и принимать.
> Как такое осуществить?
SendMessage.
Regards, LVT.
← →
immi (2006-10-25 22:56) [2]Какая дискриминация? Удаленному -- не означает удаление, как операцию. А удаленному -- эначит противоположному пользователю, пользователю от которого пришел пакет.
Пример с сокетами. Блокирующие сокеты в общем потоке ожидают выполнение операции и только по завершении передают управление на следующую строчку. В отдельном потоке, соответственно ожидание завершения операции будет происходить отдельно от основного потока, там самым не мешаю остальным действиям другого потока.
Пример с сокетами -- не именно пример для сокетов, а как пример именно этой опирации ожидания, блокирования.
← →
Zeqfreed © (2006-10-25 23:06) [3]Э-э-м. Асинхронные (неблокирующие) сокеты + select? Там и таймаут и все что душа пожелает.
← →
immi (2006-10-26 09:07) [4]Нееее, я не говорю про сокеты: я привел пример такой, что сокеты блокируют дальнейшие операции пока не выполнят свою. Вот и мне подобная штука нужна, но не в сокетах.
← →
StriderMan © (2006-10-26 09:11) [5]если задача - сделать подтверждение доставки, то в протоколе TCP оно уже сделано
← →
Сергей М. © (2006-10-26 09:46) [6]
> immi (25.10.06 21:50)
> Есть некий класс
Твой класс ? Т.е. его разработал именно ты ?
← →
immi (2006-10-26 09:50) [7]Нет, не именно подтверждение доставки, нужен спецефический отклик.
Класс мой.
← →
Сергей М. © (2006-10-26 09:57) [8]
> immi (26.10.06 09:50) [7]
Ну тогда ничто не мешает реализовать в нем неблокирующую транспортную логику
← →
immi (2006-10-26 10:32) [9]Хммм... "неблокирующую транспортную логику", вот в это всё и упирается, т.е. я просто не понимаю. Поэтому и пишу в "начинающим".
← →
Сергей М. © (2006-10-26 10:48) [10]
> immi (26.10.06 10:32) [9]
Разговор будет беспредметен, пока ты не уточнишь, какой конкретно транспортный механизм ты используешь в своем классе - гнезда, программные каналы, что-то иное ...
← →
Anatoly Podgoretsky © (2006-10-26 11:54) [11]
> Нееее, я не говорю про сокеты: я привел пример такой, что
> сокеты блокируют дальнейшие операции пока не выполнят свою.
> Вот и мне подобная штука нужна, но не в сокетах.
while true do;
Вот пока это не закончится, будет блокирование, вот по подобному алгоритму и работай, если конечно Инди не будет мешать, а она наверно будет мешать.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.064 c