Повышение духа 2: есть ли способ узнать, каков процент прогрессирования парсера?
Мне удалось разобрать файл pgn на несколько игр, в основном благодаря этому форуму.
Однако, поскольку в файлах, с которыми мне приходится иметь дело, очень много игр, процесс может занять две минуты на моем последнем компьютере. Вот почему я хотел бы анимировать индикатор выполнения в приложении с графическим интерфейсом с помощью этого анализатора.
Я думаю, что самым простым способом было бы "спросить" у духа, сколько символов он уже обработал и сколько осталось символов. (Или сколько строк осталось и было обработано).
Является ли это возможным? Если да, то как мне нужно изменить файл парсера, чтобы получить это соотношение?
1 ответ
Ты можешь использовать line_pos_iterator
и потенциально iter_pos
Примитив из хранилища.
(@GuyGreer:) Нет никакого способа узнать количество задействованных возвратов (иначе, во-первых, не нужно было бы возвращаться назад). Итак, лучшее, что нужно сделать, это принять то, что вы получаете какую-то "среднюю пропускную способность", которая иногда может быть немного громоздкой или медленной. Если ваша грамматика настолько неуравновешена, что эти вариации представляют собой нечто большее, чем шум, вам следует в первую очередь исправить определения грамматики / синтаксического анализатора.
Чтобы противостоять "проблеме" незнания длины потока, вы не можете исправить ее, если не считать ее потоком.
Я бы предложил карту памяти. Вы можете использовать средства из
boost::iostreams
,boost::interprocess
или простоmmap
,
По моим оценкам, у меня есть как минимум 3 ответа, демонстрирующих каждую из техник, упомянутых в этом ответе, поэтому я просто буду искать их на этом сайте.