 |
Меню |
|
|
|
|
 |
Главная |
|
| Посл.ответ |
Сообщение |
|
Дата: 5 Сен, 09:55
QNX 6.3.0 sp2
Имеется текстовый файл, размер которого не позволяет запихнуть его в память тупым realloc'ом. Файл состоит из записей, отсортированных по некоему счётчику (для простоты - по времени выполнения записи, что является первым полем каждой записи). Есть слайдер, отражающий этот файл - по перемещению каретки необходимо вычитать текущую запись (понятно, что это будет примерно необходимая запись, более точно потом перемещаемся другими средствами. Это уже не суть важно...).
Если бы можно было бы ограничиться только Pt_SLIDER_REALIZED, то ИМХО достаточно было бы простого fseek() для быстрого доступа к плюс-минус нужному фрагменту файла. Однако при необходимости обработки Pt_SLIDER_DRAGGED эта идея уже не кажется столь соблазнительной.
Есть ли разумная альтернатива? Кэширование, хэширование, ещё какие-то умные слова?
Спасибо прочитавшим, большое - ответившим. С уважением, ZZZ
|
|
Дата: 5 Сен, 11:35
ZZZ Pt_SLIDER_REALIZED
Pt_SLIDER_RELEASED
ZZZ Однако при необходимости обработки Pt_SLIDER_DRAGGED эта идея уже не кажется столь соблазнительной.
Необходимо отображать только одну, две первые записи во время таскания ползунка. Взводить таймер на очень малое время, если за это время не пришло новое событие для перемещения - отрисовывать всё остальное. Если пришло событие перемещения, то позиционируемся на новое место и опять к началу алгоритма.
В идеале, конечно, отрисовка в другом потоке, этому потоку просто передается что, где и сколько отрисовывать, если пришло новое событие, то даем этому другому потоку новое задание, отменяя старое. |
|
Дата: 5 Сен, 11:37
Ну а для быстрого и точного позиционирования по файлу, если записи не имеют постоянного размера, строим индекс, и уже работаем с индексом (его также можно грузить не весь в память).
|
|
Дата: 5 Сен, 12:25 · Поправил: ZZZ
Да проблема не в том, что отрисовка отстаёт (хотя и в этом), а в том, что эти [autocensored] юзеры, обнаружив, что при движении слайдера картинка дивно меняется, начинают играться в калейдоскоп, быстро шуруя кареткой (хм. Сам такой).
В результате винчестер мучаем. Не могу придумать, как бы волков накормить, а овец уберечь.Чтобы не на каждое движение винчестер колебать. Заколебаем ведь.
Что значит индексировать файл? Номер записи - позиция в sream'е, или что Вы имеете ввиду?
С уважением, ZZZ
|
|
Дата: 5 Сен, 12:53
ZZZ Не могу придумать, как бы волков накормить, а овец уберечь.Чтобы не на каждое движение винчестер колебать. Заколебаем ведь.
Тогда отрисовывать полностью, чтобы движение слайдера не доставляла удовольствия.
ZZZ Что значит индексировать файл? Номер записи - позиция в sream'е, или что Вы имеете ввиду?
Именно, но только если размер записей плавающий. |
|
Дата: 5 Сен, 13:36
Плавающий, ещё как. Как утка.
Да, видимо, так сделать и придётся. Таблица индексов вроде должна в память влезть.
Конечно, появляется пауза - время считывания файла+формирование таблицы, ну да ведь чудес, увы, не бывает.
Спасибо.
С уважением, ZZZ
|
You must login to post.
| | |