View previous topic :: View next topic |
Author |
Message |
_Johm
Joined: 14 May 2006 Posts: 119
|
(Separately) Posted: Thu Dec 11, 2008 15:24 Post subject: Фоновый подсчёт размера папки по пробелу |
|
|
Можно ли сделать подсчет размера папки при нажатии на пробел фоновым процессом?
! | Моторокер: | Второй вопрос удалён, заголовок поправлен.
Один вопрос – одна тема. | |
|
Back to top |
|
 |
D1P

Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
(Separately) Posted: Thu Dec 11, 2008 15:28 Post subject: |
|
|
Да, да.
Вопроса "как это сделать" не было. Тем не менее: в первом случае - плагин DirSizeCalc, во втором - ответ настолько очевиден, что оягребу. _________________ База знаний о Total Commander
Блог |
|
Back to top |
|
 |
_Johm
Joined: 14 May 2006 Posts: 119
|
(Separately) Posted: Thu Dec 11, 2008 15:47 Post subject: |
|
|
По второму, извеняюсь, наверно промахнулся мимо ОК, поэтому и решиль задать вопрос пока паника не охватилав.
Первый: dirsizecalc - знаю, но это не то, в вопросе написано при нажатии на пробел! |
|
Back to top |
|
 |
D1P

Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
(Separately) Posted: Thu Dec 11, 2008 16:56 Post subject: |
|
|
Действительно, посмотрел - DirSizeCalc последней версии всё считает в фоне. Тем не менее спецификация контентных плагинов позволяет делать именно то, что требуется, и был уверен, что DirSizeCalc это умеет. _________________ База знаний о Total Commander
Блог |
|
Back to top |
|
 |
_Johm
Joined: 14 May 2006 Posts: 119
|
(Separately) Posted: Thu Dec 11, 2008 17:51 Post subject: |
|
|
Жаль что нет решения подсчету размера папки в фоне при нажатии на пробел. В иделе, лучше бы это было вшито в программу по умолчанию, а то если папка большая - все встает, и приходиться жать esc.
Еще вопрос, чтобы не создавать новую тему.
Ради интереса посмотрел UnrealCommander у него осуществляется навигация по папкам в строке пути. Как это сделать в TC, я нашел на форуме ответ, порпавил ini (не помую что), но эффекта не получил, при одинарном нажатии на строку пути, она выделяется.
! | CaptainFlint: | Нарушение пп. 9, 12 правил. | |
|
Back to top |
|
 |
Avada

Joined: 01 Aug 2008 Posts: 10417 Location: Россия, Саратов
|
(Separately) Posted: Thu Dec 11, 2008 19:46 Post subject: |
|
|
_Johm
Нажимать с Shift или указать в wincmd.ru значение ключа InplaceRenamePath=2 (ручками). В TC 7.50 всё будет ещё интереснее.
_Johm wrote: | Еще вопрос, чтобы не создавать новую тему. |
После таких слов обычно приходит модератор и следуют выводы. Правила надо соблюдать. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
 |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6193 Location: Москва
|
(Separately) Posted: Fri Dec 12, 2008 01:54 Post subject: |
|
|
D1P wrote: | Тем не менее спецификация контентных плагинов позволяет делать именно то, что требуется |
Что-то я не помню такого в спецификации… Там, если не ошибаюсь, либо в фоне, либо по запросу, но не то и другое вместе. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
 |
D1P

Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
(Separately) Posted: Fri Dec 12, 2008 08:30 Post subject: |
|
|
CaptainFlint wrote: | D1P wrote: | Тем не менее спецификация контентных плагинов позволяет делать именно то, что требуется |
Что-то я не помню такого в спецификации… Там, если не ошибаюсь, либо в фоне, либо по запросу, но не то и другое вместе. |
В общем да, по пробелу и в фоне вот так сразу - нельзя.
Но можно сделать так: в ContentGetValue возвращать ft_ondemand, тут же фоновым потоком посчитать и запомнить размер каталога, а при нажатии пробела вернуть уже готовую цифру. _________________ База знаний о Total Commander
Блог |
|
Back to top |
|
 |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6193 Location: Москва
|
(Separately) Posted: Fri Dec 12, 2008 11:45 Post subject: |
|
|
D1P wrote: | Но можно сделать так: в ContentGetValue возвращать ft_ondemand, тут же фоновым потоком посчитать и запомнить размер каталога, а при нажатии пробела вернуть уже готовую цифру. |
Так автору темы, как я понимаю, требуется совсем другое: чтобы система не грузилась постоянными обновлениями/подсчётами, а только тогда, когда это действительно нужно (при нажатии пробела), и при этом чтобы сам Тотал не зависал. К сожалению, такое сделать вряд ли получится. Можно, конечно, по пробелу вернуть какой-нибудь 0 и начать подсчёт, но как Тоталу сообщить, что подсчёт закончен и можно обновлять значение? Разве что хаком — послать сообщение окну Тотала на перечитывание данных, чтобы он снова запросил плагин о значении, и тот ему уже вернул бы корректную величину. Но заморочек, ИМХО, неоправданно много. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
 |
D1P

Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
(Separately) Posted: Fri Dec 12, 2008 13:03 Post subject: |
|
|
Quote: | К сожалению, такое сделать вряд ли получится |
Гм, не вижу больших трудностей. Может мы друг друга недопоняли.
Код примерно такой, за неимением времени до компилируемого состояния не расписываю:
Code: |
function ContentGetValue(FileName:pchar;FieldIndex,UnitIndex:integer;FieldValue:pbyte;maxlen,flags:integer):integer; stdcall;
Begin
if Flags=CONTENT_DELAYIFSLOW then
begin
GetDirSizeBackground (FileName,DirSize);
Result:=ft_ondemand;
end else
begin
if DirSizeCounted (FileName) then Move(DirSize, FieldValue^, sizeof(DirSize)) else {тут можно подождать, или посчитать, или ещё что-то}
Result:=ft_numeric_32;
end;
End;
|
DirSize - глобальная переменная, будем считать, что GetDirSizeBackground отрабатывает в фоне. Прекрасно знаю, что вызов должен быть совсем другой, и надо будет заботиться о куче вещей: успела ли отработать функция получения размера, не был ли подсчитан размер раньше, и т.д. Но это всё решаемо.
Другое дело, что для текущей задачи я бы заморачиваться не стал. _________________ База знаний о Total Commander
Блог |
|
Back to top |
|
 |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6193 Location: Москва
|
(Separately) Posted: Fri Dec 12, 2008 13:52 Post subject: |
|
|
D1P wrote: | Может мы друг друга недопоняли. |
Похоже. По твоему коду (и предыдущему описанию) получается вот что:
1. Открываю в Тотале каталог.
2. Включаю нужный набор колонок.
3. Тотал лезет в плагин запрашивать все поля.
4. Плагин возвращает ondemand, но сам в этот момент подло начинает сканить все папки на предмет вычисления их размеров.
5. Итог: имеем тормоза, от которых как раз и призван был спасать ondemand, который не выполняется, пока ты явно не нажмёшь пробел.
Иначе говоря, твой вариант ничем не отличается от стандартного фонового подсчёта размеров, реализованного в DirSizeCalc. Отличие лишь одно: размер будет показан не сразу, а лишь по нажатию пробела, что в такой реализации выглядит просто глупо: раз уж всё равно потратили время и ресурсы компа на вычисление, так что уж результаты-то теперь скрывать? _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
 |
D1P

Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
(Separately) Posted: Fri Dec 12, 2008 14:38 Post subject: |
|
|
Quote: | Иначе говоря, твой вариант ничем не отличается от стандартного фонового подсчёта размеров, реализованного в DirSizeCalc. Отличие лишь одно: размер будет показан не сразу, а лишь по нажатию пробела, что в такой реализации выглядит просто глупо: раз уж всё равно потратили время и ресурсы компа на вычисление, так что уж результаты-то теперь скрывать? |
Я вижу теоретические варианты, когда такой подход будет иметь плюсы. Например, поток скана можно запускать с приоритетом Idle, на современных машинах его работа будет совсем незаметна. А в случае, если пользователь ВНЕЗАПНО решит проверить размер каталога - ему подсунется готовое значение. Собранные значения можно кешировать.
Практически же реализация такой фигни будет бессмысленна чуть менее, чем полностью. Хотя бы потому, что размер каталога обычно смотрят, когда ожидают, что он изменился - а в таком случае предварительный подсчёт размера, равно как и его кеширование только вредят.
Так что это всё из области измышлений "а что, если?". _________________ База знаний о Total Commander
Блог |
|
Back to top |
|
 |
Моторокер

Joined: 06 May 2005 Posts: 1517 Location: г. Пермь (читается Перьмь)
|
(Separately) Posted: Fri Dec 12, 2008 18:50 Post subject: |
|
|
D1P wrote: | Например, поток скана можно запускать с приоритетом Idle, на современных машинах его работа будет совсем незаметна. |
Операции с внешними носителями всё равно медленнее, чем со встроенными. Допустим, подсчёт значений по сети или на CD может затянуться. Кроме того, будет бессмысленно нагружать сеть или привод CD. К тому же, для CD придётся гонять компакт туда-сюда, если перемещаться по папкам диска. Тотал то содержимое текущей папки будет считать, то вложенных.
Зачем вообще может понадобиться фоновый подсчёт значений?
Например, чтобы подсчитать общий объём нескольких каталогов. Нажать пробел и стрелку вниз в таком случае быстрее, чем Alt+Enter или Ctrl+L.
Но ведь буфер клавиатуры кешируется. И даже если первая папка содержит много папок/файлов, нажатие стрелки вниз всё равно сработает, но позже.
Тогда какая практическая польза от фонового подсчёта? Красивый вид панелей без зависания?
Ещё вопрос: если Application.ProcessMessages периодически будет срабатывать во время подсчёта, проблема решится? _________________ плагины для Total Commander, статьи Graphics Converter; NSCopy; SEO HTML; KillOK; Плагин на Delphi
ПармаСруб - строительство домов и бань в Перми |
|
Back to top |
|
 |
D1P

Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
(Separately) Posted: Fri Dec 12, 2008 20:02 Post subject: |
|
|
Quote: | Тогда какая практическая польза от фонового подсчёта? Красивый вид панелей без зависания? |
По тому теоретическому варианту, который я привёл, всё расписано выше.
Quote: | Ещё вопрос: если Application.ProcessMessages периодически будет срабатывать во время подсчёта, проблема решится? |
Где? У dll нет Application.ProcessMessages. Если имеется в виду впихнуть это в TC - хз, как там устроено, подозреваю что всё равно нет. _________________ База знаний о Total Commander
Блог |
|
Back to top |
|
 |
_Johm
Joined: 14 May 2006 Posts: 119
|
(Separately) Posted: Mon Dec 15, 2008 16:11 Post subject: |
|
|
2 Моторокер
Quote: | Тогда какая практическая польза от фонового подсчёта? Красивый вид панелей без зависания?
|
Во время этого зависания можно переключиться в другую панель и начать подготовку для копирования; к тому же для подсчета иногда тербуется несколько секунд, а если папок тоже несколько? |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|