Форум: "Сети";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];
Внизмногопотовый загрузчик файлов Найти похожие ветки
← →
Reindeer Moss Eater (2003-08-13 15:54) [40]Просто если бы Инди не выставляла размер потока как она это делает.
До парня никак не доходит, что это делает не Indy.
← →
Zelius (2003-08-13 16:01) [41]
> Reindeer Moss Eater
устал я от тебя, честно, даже ругаться не хочется... одна здравая мысль приправлена огромным количеством уксуса и неоправданного ехидства. вот тебе выдержка из Инди:
procedure TIdTCPConnection.ReadStream(AStream: TStream; AByteCount: Integer = -1;
const AReadUntilDisconnect: Boolean = False);
var
i: Integer;
LBuf: packed array of Byte;
LBufSize: Integer;
LWorkCount: Integer;
procedure AdjustStreamSize(AStream: TStream; const ASize: integer);
var
LStreamPos: LongInt;
begin
LStreamPos := AStream.Position;
AStream.Size := ASize; // Must reset to original size as in some cases size changes position
if AStream.Position <> LStreamPos then begin
AStream.Position := LStreamPos;
end;
end;
begin
if (AByteCount = -1) and (AReadUntilDisconnect = False) then begin
// Read size from connection
AByteCount := ReadInteger;
end;
// Presize stream if we know the size - this reduces memory/disk allocations to one time
if AByteCount > -1 then begin
AdjustStreamSize(AStream, AStream.Position + AByteCount); end;
Если бы не вызывался бы этот AdjustStreamSize, то можно было бы писать сразу в файл минуя горячо любимые тобой промежуточные буфера.
← →
Reindeer Moss Eater (2003-08-13 16:18) [42]Ну и где здесь противоречие тому что я говорил?
Библиотека сама пишет данные в поток, переданный в качестве параметра?
Библиотека не может писать не с начала потока?
Библиотека не может закачивать параллельно в N потоков?
← →
Zelius (2003-08-13 16:22) [43]проехали, забудь!
← →
nikkie (2003-08-13 17:03) [44]>Zelius
забудь про инди. покажи мне код, который будет писать сразу в два места в файле, а то у меня фантазии не хватает. два потока (streams) на запись одного файла открыть нельзя. писать в один stream из двух разных threads - это как же изголиться надо... во-первых, постоянно синхронизироваться надо, во-вторых, в каждом thread надо запоминать position после записи кусочка и устанавливать position перед каждой записью.
← →
Zelius (2003-08-13 17:12) [45]
> nikkie © (13.08.03 17:03) [44]
ну не скажи, можно, у меня прекрасно работает.
ведь есть же такая вещь, как fmShareDenyRead и fmShareDenyWrite, открываешь дважды файл с соответсвующими флагами и все. дело в том, что каждый поток пишет в свою не пересекающуюся часть файла, поэтому никаких проблем не возникает, пиши себе в поток не задумываясь...
← →
nikkie (2003-08-13 18:00) [46]ок, наконец понял, что ты пытаешься делать - создаешь TFileStream с флагом fmShareDenyNone в каждом потоке на один и тот же файл.
ну допустим создатели инди не предусмотрели именно такое использование и именно с TFileStream. допустим, так, как ты хочешь, не работает, потому что мешает AdjustStreamSize. а кто тебе мешает сделать свой TFileStream просто переопределив SetSize?
← →
Zelius (2003-08-13 18:27) [47]
> nikkie © (13.08.03 18:00) [46]
не повершь, это была моя первая мысль! я отключил изменение размера, но почему-то были неуловимые глюки, периодически файлы скачивались не правильно, пришлось отказаться от этой идеи.
← →
nikkie (2003-08-13 18:31) [48]так может тогда проблема все ж таки не в инди? ;)
← →
Zelius (2003-08-13 18:36) [49]нет, именно в инди, не надо брать на себя лишнее, типа, размер потока устанавливать. :)
← →
gedd (2003-08-14 10:01) [50]Ребятки
Ваша перепалка конечно классная но хотелось бы работать не через
инди, а через общие протоколы типа WinInet овских
с компонентом инди IdHTTP были проблемы с кодировками
приведите пожалуйста пример
как можно скачать любой файл (*.http, *.rar и т.д.)
Вопрос с размером файла решил. Но ...
Как используя WinInet пройти через прокси сервер.
← →
MACTEP (2003-08-14 10:03) [51]удалят жы твой пост, нисмышлёныш
← →
gedd (2003-08-14 10:04) [52]а почему удалят то
← →
MACTEP (2003-08-14 10:09) [53]будет написано "задай свой вопрос в новой ветке" гыгыгыгы)
может даже "гыгыгыгы" напишут
;))))
← →
Zelius (2003-08-14 10:12) [54]
> gedd
я только на инди качал, с WinInet ом так и не подружился, не разобрался с асинхронностью... зато все что угодно и пркокся не помеха
← →
gedd (2003-08-14 10:12) [55]хорошо открываю новую ветку
Страницы: 1 2 вся ветка
Форум: "Сети";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.011 c