
29.10.2009, 23:29
|
|
Участник форума
Регистрация: 22.11.2008
Сообщений: 142
Провел на форуме: 636446
Репутация:
32
|
|
Сообщение от slesh
Вопрос 1:
Второй вариант - принципиально не правильный. Зачем копировать данные во временный буфер? Юзай указатели. т.е. это можно оформить примерно так:
Код:
function SendText(Sock: TSocket; S: String): Integer;
var
SendLen: Integer;
BufStart : pchar;
BufLen : integer;
begin
BufLen := Length(s); // сразу вычислим размер, чтобы потом постоянно не считать
BufStart := @s[1]; // установим указатель на начало строки
While ( BufLen > 0) do // если есть что отправлять
begin
if BufLen < 1024 then SendLen := BufLen else BufLen := 1024; // вычислим сколько байт отправлять. Но не более 1024 (1024- это так к примеру)
SendLen := Send(Sock, BufStart, SendLen, 0); // отправим
if SendLen <= 0 then break; // если ошибка была то выйти из цикла отправки
BufStart := pchar(dword(BufStart) + SendLen); // переместим указатель дальше
BufLen := BufLen - SendLen; // уменьшим кол-во оставшихся данных
end;
end;
т.е. примерно так должно идти.
Второй вопрос. В принципе правильно.
Принципиально неправильный - из-за нерациональности с памятью?
Проверил твою идею.
Да указатели действительно облегчили жизнь.
ЗЫ походу не BufLen а SendLen и ещё походу BufStart ты тут в конце указатель забыл 
Последний раз редактировалось Flenov; 30.10.2009 в 03:09..
|
|
|