Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
14-40635
Nick-From
2003-09-18 10:14
2003.10.13
Про ShellExecute


1-40371
dataMaster
2003-10-03 10:19
2003.10.13
Как в ListView показать нужный Item первым


3-40230
bobtubob
2003-09-22 17:03
2003.10.13
Как в DBGrid изменить цвет выделения (select)


14-40571
ARTEMKA
2003-09-23 12:03
2003.10.13
Где найти описания, как создать свой TMediaPlayer


1-40441
Ser_ega
2003-10-02 23:35
2003.10.13
Дата





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский