Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

Зафиксировать обработку функции.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.088 c
5-1142506194
Ice
2006-03-16 13:49
2006.11.12
Перекрытый Paint.


2-1162043477
TIF
2006-10-28 17:51
2006.11.12
Таблица с помощью WordApplication


15-1161329175
Maximaxi
2006-10-20 11:26
2006.11.12
Скачать Delphi 4


15-1161345778
vidiv
2006-10-20 16:02
2006.11.12
isa firewall client от isa 2004


2-1161722111
~Aid~
2006-10-25 00:35
2006.11.12
полиндромы