![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подсчет исходящих байтов [D6, WinXP]
Beglec © (2002-11-26 14:52:00)Есть простой сокет. В программа получает и отправляет сообщения.
Допустим подсчитать входящие байты очень легко.
в событие OnRead
Inc(AllByte,InByte);
То есть в AllByte хранится сумма всего входящих байт.
Внимание вопрос: Как можно посчитать исходящие байты, также в одном месте.
Пытаюсь примерно тоже самое сделать в событии OnWrite чего то не получается.
Спосибо ща ответ
F1 (2002-11-26 17:48:00) [1]Ok
Digitman (2002-11-26 17:47:00) [2]Правильно, вопрос был насчет "одного места") .. ладно хоть - не ж.))
Этим "местом" и будет в дан.случае процедура-обработчик OnWrite()
F1 (2002-11-26 17:24:00) [3]Ну, ведь такой вопрос был...
Digitman (2002-11-26 15:46:00) [4]да хреново ,видать , "просвятил" ... если сразу же не ставишь во главу угла OnWrite(). Это - самое важное здесь.
F1 (2002-11-26 15:44:00) [5]>Digitman © (26.11.02 15:38)
>Другое дело)
Ну дык твоя школа, ты меня с сокетами и просвятил! ;)
Digitman (2002-11-26 15:38:00) [6]
> F1
Другое дело)
Только - опять же - если -1, надо ждать OnWrite() и повторять постановку в очередь, иначе данные можно запросто "потерять" при передаче
F1 (2002-11-26 15:35:00) [7]>Digitman © (26.11.02 15:34)
Согласе, не учел
function MySendBuf(..)
begin
result:=sendbuf(..)
if result>0
MyFuckingCountSendByte:=MyFuckingCountSendByte+Result;
end;
Digitman (2002-11-26 15:34:00) [8]
> Beglec
А если Result = -1 ? Каковы твои действия ?
Beglec (2002-11-26 15:31:00) [9]F1
Фенкс
Так бы сразу ;)
Это пример более подходящий
F1 (2002-11-26 15:23:00) [10]Ну если SendBuf из разных мест, то
function MySendBuf(..)
begin
result:=sendbuf(..)
MyFuckingCountSendByte:=MyFuckingCountSendByte+Result;
end;
:)))
Digitman (2002-11-26 15:14:00) [11]с SendBuf - еще проще : в случае полного/частичного успеха он возвращает кол-во байт, помещенных в очередь на передачу. Просто если результат SendBuf > 0, прибавляй его к сч-ку.
какой тебе пример ? рядом ветка идет с <Dmitry Polskoy>, там и смотри шаблон
Beglec (2002-11-26 15:06:00) [12]F1
А теперь представь, что твоя программа отвечат на 250 разных запросов и каждый раз, разный набор данных.
Теперь скажи, в чем рациональность, Делать после каждого send учет байтов?
Ведь это можно сделать всего одной строкой.
Digitman
>>>>>событии OnWrite чего то не получается!!!
Поправка к вопросу
отрявляю при помощи SendBuf.
Желательно немного кода.
Digitman (2002-11-26 15:04:00) [13]ставь SendStream() только "в одном месте" - в OnWrite().
до SendStream сохрани Position
сразу же за SendStream снова считывай Position, разницу прибавляй к сч-ку (*)
а для первоначального вызова SendStream зафиксируй где-нить ссылку на Stream и программно вызови процедуру-обработчик OnWrite(). В обработчике же получи сохраненную ссылку на stream и дальше - (*)
Digitman (2002-11-26 14:57:00) [14]
> также в одном месте
ну так и считай "в одном месте" - в этом самом OnWrite() !
есть метод SendStream, у него есть св-во Position - это и есть размер "переданных" данных
F1 (2002-11-26 14:56:00) [15]А при отправке(send...) слабо :)))