Повышение духа 2: есть ли способ узнать, каков процент прогрессирования парсера?

Мне удалось разобрать файл pgn на несколько игр, в основном благодаря этому форуму.

Однако, поскольку в файлах, с которыми мне приходится иметь дело, очень много игр, процесс может занять две минуты на моем последнем компьютере. Вот почему я хотел бы анимировать индикатор выполнения в приложении с графическим интерфейсом с помощью этого анализатора.

Я думаю, что самым простым способом было бы "спросить" у духа, сколько символов он уже обработал и сколько осталось символов. (Или сколько строк осталось и было обработано).

Является ли это возможным? Если да, то как мне нужно изменить файл парсера, чтобы получить это соотношение?

1 ответ

Решение

Ты можешь использовать line_pos_iterator и потенциально iter_pos Примитив из хранилища.

  • (@GuyGreer:) Нет никакого способа узнать количество задействованных возвратов (иначе, во-первых, не нужно было бы возвращаться назад). Итак, лучшее, что нужно сделать, это принять то, что вы получаете какую-то "среднюю пропускную способность", которая иногда может быть немного громоздкой или медленной. Если ваша грамматика настолько неуравновешена, что эти вариации представляют собой нечто большее, чем шум, вам следует в первую очередь исправить определения грамматики / синтаксического анализатора.

  • Чтобы противостоять "проблеме" незнания длины потока, вы не можете исправить ее, если не считать ее потоком.

    Я бы предложил карту памяти. Вы можете использовать средства из boost::iostreams, boost::interprocess или просто mmap,

По моим оценкам, у меня есть как минимум 3 ответа, демонстрирующих каждую из техник, упомянутых в этом ответе, поэтому я просто буду искать их на этом сайте.

Другие вопросы по тегам