Я планирую написать интерактивный плагин обработки геометрии C++, который будет часто сортировать большие объемы данных. Хотя предварительные указания состоят в том, что сортировка займет всего секунду или два, я бы предпочел показать прогресс за это время - я бы хотел обновить индикатор прогресса несколько раз в секунду. Это было бы предпочтительнее включить курсор ожидания и оставить пользователя с программой замерзает в течение неопределенного промежутка времени (даже если это всего лишь несколько секунд).Как отслеживать/показывать прогресс во время сортировки по C++
Если бы я использовал что-то вроде std :: sort, я мог бы использовать функцию сравнения, чтобы обновлять индикатор прогресса время от времени, но я бы не имел понятия «процент завершен». Я мог бы также разбить сортировку на подтипы, обновить прогресс между подтипами и затем слить. Мое лучшее решение может заключаться в том, чтобы написать собственный метод сортировки, хотя я не знаю, сколько усилий потребуется для достижения производительности так же, как std :: sort (и обеспечить правильность). В любом случае этот метод сортировки иногда посылает «процентное завершение» методу обратного вызова.
Мне было интересно, столкнулись ли другие люди и решить эту проблему. Я надеюсь, что, возможно, есть метод сортировки в стандартной библиотеке, которая делает то, что я хочу, или какую-то другую технику, о которой я не думал.
Обновление: Спасибо за отличные ответы. Было несколько очень хороших предложений, и я собираюсь отложить принятие принятого ответа, пока у меня не будет возможности проверить идеи в моем предстоящем проекте.
Обновление 2: Я выполнил свой проект, и это оказалось не проблемой (по крайней мере, для клиента. Поскольку они будут продавать программное обеспечение, они могут по-прежнему получать отзывы от своих клиентов, которые будут меняться их умы об этом). Выбор приемлемого ответа был затруднен, потому что было много хороших ответов, но в итоге тот, который я выбрал, указывал на статью wiki по Merge Sort, которая имела очень запоминающуюся анимацию. Итак, это первая стратегия, которую я бы преследовал, если бы мне нужно было продолжить это).
Лично я бы отложил добавление такой функции, пока не будет наблюдаться реальная производительность сортировки. В противном случае он решает проблему, которая может не существовать. Вы также можете проделать простой маршрут и отобразить «Сортировка ...» в виде текстового элемента управления или в строке состояния. – Reinderien
@Reinderien: согласился, если он не сломался, не исправить это. Но я пытаюсь задуматься об этом. И мой опыт в области 3D-графики и обработки геометрии заключается в том, что пользователи будут легко задушить что-либо с моделями и данными, большими, чем вы когда-либо мечтали. – brainjam