Ich plane, ein interaktives C++ - Geometrieverarbeitungs-Plug-In zu schreiben, das häufig große Datenmengen sortiert. Obwohl vorläufige Hinweise darauf sprechen, dass die Sortierung nur ein oder zwei Sekunden dauern wird, würde ich es vorziehen, während dieser Zeit Fortschritte zu zeigen - d. H. Ich möchte einige Male pro Sekunde eine Fortschrittsanzeige aktualisieren. Dies wäre vorzuziehen, einen Warte-Cursor einzuschalten und den Benutzer mit einem Programm zu belassen, das für eine unbestimmte Zeitdauer einfriert (selbst wenn dies nur ein paar Sekunden ist).So überwachen/zeigen Sie den Fortschritt während einer C++ - Sortierung an
Wenn ich etwas wie std :: sort verwenden würde, könnte ich die Vergleichsfunktion verwenden, um die Fortschrittsanzeige hin und wieder zu aktualisieren, aber ich hätte keine Ahnung von "Prozentsatz abgeschlossen". Ich könnte die Sortierung auch in Untersortierungen unterteilen, den Fortschritt zwischen Untersortierungen aktualisieren und dann zusammenführen. Meine beste Wette könnte sein, eine eigene Sortiermethode zu schreiben, obwohl ich nicht weiß, wie viel Aufwand es erfordert, um eine Leistung zu erhalten, die so gut wie std :: sort ist (und die Korrektheit gewährleistet). In jedem Fall würde diese Sortiermethode gelegentlich einen "Prozentsatz abgeschlossen" an eine Callback-Methode senden.
Ich habe mich gefragt, ob andere Leute dieses Problem entdeckt und gelöst haben - ich hoffe, dass es eine Sortiermethode in einer Standardbibliothek gibt, die das tut, was ich will, oder eine andere Technik, an die ich nicht gedacht habe.
Update: Danke für die tollen Antworten bisher. Es gab ein paar sehr gute Vorschläge, und ich werde die akzeptierte Antwort abwägen, bis ich die Möglichkeit hatte, die Ideen in meinem nächsten Projekt zu testen.
Update 2: Ich habe mein Projekt abgeschlossen, und dies stellte sich als kein Problem heraus (zumindest für den Kunden. Da sie die Software verkaufen werden, können sie immer noch Feedback von ihren Kunden erhalten ihre Gedanken darüber). Die Wahl einer akzeptierten Antwort war schwierig, weil es viele gute Antworten gab, aber am Ende zeigte die, die ich wählte, auf einen Wiki-Artikel über Merge Sort, der eine sehr bewegende Animation hatte. Das wäre die erste Strategie, die ich verfolgt hätte, wenn ich damit hätte weitermachen müssen.
Persönlich würde ich auf Hinzufügen eines solchen Features warten, bis die tatsächliche Leistung der Sortierung beobachtet wird. Ansonsten wird ein Problem angegangen, das möglicherweise nicht existiert. Sie könnten auch die einfache Route wählen und "Sortierung ..." in einer Art Protokollsteuerelement oder einer Statusleiste anzeigen. – Reinderien
@Reingeberien: einverstanden, wenn es nicht kaputt ist, repariere es nicht. Aber ich versuche darüber nachzudenken. Und meine Erfahrung in der 3D-Grafik- und Geometrieverarbeitung ist, dass Benutzer mit Modellen und Daten, die größer sind, als Sie es sich jemals erträumt haben, alles leicht ersticken können. – brainjam