Форум: "Прочее";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
Внизвсё -- досисадминился Найти похожие ветки
← →
Rouse_ © (2006-07-19 21:29) [40]Т.е. если ты понял я пытаюсь работать с файлом на уровне его физической структуры через read write (благо формат более менее известен), а не через АПИ. Это достаточно часная ситуация
← →
Piter © (2006-07-19 21:40) [41]Rouse_ © (19.07.06 21:25) [39]
вот, слушай, и я ведь об этом. Так если ты фактически повторяешь работу StgIsStorageFile - зачем ты ее вызываешь вообще?
То есть, сначала винда своими внутренними механизмами делает это, а потом ты повторно делаешь это уже на низком уровне. Но возникает вопрос - НАФИГА?
Если уж ты низкоуровнево разбираешь все равно - так и сделай до конца. Ведь как думаешь - у StgIsStorageFile есть критерии остановки работы, предотвращение от ухода в бесконечную рекурсию и прочее? Ну так и сделай такие же критерии в своем until, тогда и необходимость двойной работы отпадет :)
Я понимаю, почему реализовано так - потому что проще и быстрее так написать, тем более уж в системе есть такая функция. Но с другой то стороны - согласись, можно написать пограмотнее - и тогда необходимость в бесконечных циклах отпадет :)
← →
Rouse_ © (2006-07-19 21:44) [42]
> Так если ты фактически повторяешь работу StgIsStorageFile
> - зачем ты ее вызываешь вообще?
Дык, под FAT32 из-за нетранзакционной модели файлики бьются иногда. Пользователи которые заплатили по 800 зеленью начинают страшно нервничать - прихождиться писать. А вызываю я ее, чтобы удостовериться - битая цепочка или нет. Нормальное завершение цепочки - значения -1, -2, -3, -4 . Каждое из них что-то да означает. Финальное завершение цепочки -2. Если StgIsStorageFile не смогла самостоятельно выйти на конец цепи - начинаю работать я. Там просто помимо убития физической структуры иногда бьются банки данных. Т.е. цепочки сами целые, а данные частично покорежены. Мне нужн выяснить - какую часть алгоритма запускать для восстановления.
← →
Piter © (2006-07-19 21:47) [43]Rouse_ © (19.07.06 21:44) [42]
да, но опять же - Розыч, ведь функционал твоей программы перекрывает функционал StgIsStorageFile? Так зачем ты ее используешь?
← →
Rouse_ © (2006-07-19 21:55) [44]Так проще и быстрее определить :) У меня сильно расширенный функционал, который для простой проверки не нужен.
← →
DiamondShark © (2006-07-19 22:25) [45]
> а намедни обнаружил в программе ещё более чудную конструкцию:
> repeat ... until true. %-) удалять не стал.
И правильно сделал.
repeat
if not Tratata(...) then break;
if Halabala(...) <> HALABALA_NOERROR then break;
....
until true;
так иногда бывает. чтоб гоутуками пуристофф не пугать ;))
← →
Eraser © (2006-07-19 22:34) [46]> [42] Rouse_ © (19.07.06 21:44)
> Пользователи которые заплатили по 800 зеленью начинают страшно
> нервничать
неужели у этих пользователей нету ещё сотни $, чтобы установить нормальную ОС ? :)
← →
Piter © (2006-07-19 22:45) [47]Rouse_ © (19.07.06 21:55) [44]
Так проще и быстрее определить :)
ну насчет быстрее я не уверен. А проще - это да :)
У меня сильно расширенный функционал, который для простой проверки не нужен
вот именно. расширенный функционал, который перекрывает виндовый.
Сначала винда сканерит на ошибки, и если ошибки найдены - то в работу вступаешь ты :)
А почему бы самому не сканерить - сразу ловить ошибки и собственно удостоверяться - а есть ли они.
← →
Ketmar © (2006-07-19 22:50) [48]>DiamondShark © (19.07.06 22:25) [45]
и так делаю. но в данном случае это был обломок от действительно "псевдобесконечного" цикла. цикл планируется вернуть назад, потому и не удалил. %-)
а избегание goto в той софтине я делаю ещё интересней:try
...
if ZZZ then exit;
...
finally
...
end;
%-)
← →
jack128 © (2006-07-19 23:11) [49]Piter © (19.07.06 22:45) [47]
А почему бы самому не сканерить - сразу ловить ошибки и собственно удостоверяться - а есть ли они.
Потому что сначала нужно работать документированными средствами, а потом уже хакать формат файла. Да и потом, сначала писалась основная программа, которая работа через IStorage, и только потом, когда юзеры стали слать битые файлы, был написан Розычевский чинитель
← →
isasa © (2006-07-19 23:28) [50]Что-то ветка затихла
while true do begin
...
if condition then break;
end;
← →
Piter © (2006-07-20 02:48) [51]isasa © (19.07.06 23:28) [50]
while true do begin
...
if condition then break;
end;
а это что такое? Если я правильно понял - чистый repeat..until, нафига тут такой while?
← →
Rouse_ © (2006-07-20 09:55) [52]
> ну насчет быстрее я не уверен.
Быстрее - быстрее, у меня после чтения каждого участка идет анализ на рекурсию (если конечно еще AV не поймали). Там память в основном жрется. Ну и различные доп вычисления которые нехиленько грузят проц.
← →
Rouse_ © (2006-07-20 10:06) [53]
> неужели у этих пользователей нету ещё сотни $, чтобы установить
> нормальную ОС ? :)
Ты не поверишь. у некторых стоят уже двухядерные пни, НО!!! Windows 98
← →
umbra © (2006-07-20 10:12) [54]2 Piter © (19.07.06 19:47) [34]
> repeat
> if ClientConnected then
> ServeClient;
> until Terminated;
>
если этот сервис выполняет для клиента длительные по времени операции, то проверка на необходимость завершения на каждой итерации - плохая идея. К примеру, ФТП сервер выдает клиенту файл размером 2 гига по узкому (скажем, 10 кб/с), но очень устойчивому каналу. К тому же, этот сервер использует блокирующие сокеты. И вот, спустя 5 минут после начала закачки у сисадмина появляется необходимость остановить сервер. Если сделать так, как Вы предложили, то сколько придется ждать сисадмину, пока сервер остановится? :)
← →
Piter © (2006-07-20 13:34) [55]umbra © (20.07.06 10:12) [54]
. Если сделать так, как Вы предложили, то сколько придется ждать сисадмину, пока сервер остановится? :)
а если вместо Terminated вставить False, как тут предлагалось, то сколько надо будет ждать?
Не понимаю вопроса.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.054 c