URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2802
[ Назад ]

Исходное сообщение
"Организация подкачки для чтения больших файлов с помощью иск..."

Отправлено Daos , 14-Апр-04 17:17 
Всем привет! Вопрос к знатокам: можно ли (ориентируясь на разработку на C++ под FreeBSD 4.8) создать механизм подкачки с помощью исключений? Что-то типа:
1. Читаем порцию
2. Обрабатываем
3. Если обработка прерывается из-за того,что нужна следующая порция,бросается исключение
4.Обрабатываем исключение (подкачкой очередного фрагмента) и возвращаем
управление в то место обрабатывающей функции, где нужны очередные данные (и отсутствие которых и привело к исключению).

Заранее спасибо!

Алексей


Содержание

Сообщения в этом обсуждении
"Организация подкачки для чтения больших файлов с помощью иск..."
Отправлено gvozd , 15-Апр-04 08:55 
>можно ли (ориентируясь на разработку на C++
>под FreeBSD 4.8) создать механизм подкачки с помощью исключений? Что-то типа:

можно, но по моему очень неплохо было бы и без них.
вообще в любом стандартном компиляторе С++
исключения одинаковые, на какой бы операционной системе он не был.
и под что бы не компилировал.
try
except

ну и throw соответственно.

Но совать сюда исключения - плохая затея. (хотя Страуструпу бы понравилась :)) ).

лучше возвращай просто ошибку.

или еще лучше - в одном потоке обрабатывай, а в другом подкачивай.
когда даные кончаются - генерируешь как-нибудь событие в поток подкачки
(мол чего тормозишь), а в потоке обработки ждешь, пока тот не сгенерирует событие - "все, кончил".



"Спасибо! А можно ли вернуться из обработки исключения в точку его "
Отправлено Daos , 15-Апр-04 11:05 
возникновения?!? Точнее-вернуться в место, непосредственно предшествующее его возникновению (иначе в этой затее нет смысла?

"нет"
Отправлено gvozd , 15-Апр-04 15:39 
нет

"Организация подкачки для чтения больших файлов с помощью иск..."
Отправлено ed , 15-Апр-04 13:53 
А как ты собираешся "возвращать" управление ?

Посмотри лучше на man mmap пусть VMM делает тоже самое, но на аппаратном уровне ;-) в винде тоже есть аналог.


"Я бы так и сделал,если бы мне по условию не могли через stdin гнать "
Отправлено Daos , 15-Апр-04 14:11 
всю эту беду (порядка 100 Гб! :)) Mmapить stdin IMHO затруднительно :))

"Я бы так и сделал,если бы мне по условию не могли через stdi..."
Отправлено ed , 15-Апр-04 14:20 
>всю эту беду (порядка 100 Гб! :)) Mmapить stdin IMHO затруднительно :))
>
да 100 гиг на ia32 не от mmap-иш, что-нибудь 64 разрядное нужно ;-)

Но с исключениями остаются проблемы:

А как ты собираешся "возвращать" управление ?
stack unwind - далеко несамый быстрый процесс, хотя если вызывать не чаще чем на каждые 100 метров, то терпимо для 100 гиг ;-)


"Эхх,жалко!Будем,значит, юзать стандартный fread :))По-другому,видать,"
Отправлено Daos , 15-Апр-04 14:34 
никак...Типа, если данные в буфере кончились-мы копируем их остаток в начало и дочитываем следующий фрагмент файла до конца буфера.Если не получилос=>временно расширяем его...

Тупо, как гнутый гвоздь...