Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.48 MB
Время: 0.038 c
2-1161943048
Ngk88
2006-10-27 13:57
2006.11.12
Четное или нечетное число


15-1161636000
Real
2006-10-24 00:40
2006.11.12
Интернет Радио - с чего начать?


3-1158227879
Neo Trinitron
2006-09-14 13:57
2006.11.12
Первичный ключ по двум полям


15-1161694578
Jeer
2006-10-24 16:56
2006.11.12
"Разрыв" RS-232


15-1161607810
boriskb
2006-10-23 16:50
2006.11.12
Несчастные MS-ненавистники :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский