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

Вниз

многопотовый загрузчик файлов   Найти похожие ветки 

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

Наверх




Память: 0.57 MB
Время: 0.034 c
1-40495
Pavels
2003-10-02 11:19
2003.10.13
проблема с загрузкой nodeValue в DOMDocument


3-40286
MakNik
2003-09-24 11:21
2003.10.13
MSSQL


1-40451
Andrey Voznesenskiy
2003-10-02 18:20
2003.10.13
Child формы


3-40280
waw
2003-09-19 15:42
2003.10.13
TADOQuery параметры с одинаковыми наименованиями


6-40552
SergP
2003-08-13 15:10
2003.10.13
Как правильно уничтожить объект TClientSocket?