我打算編寫一個交互式C++幾何處理插件,該插件將經常對大量數據進行排序。雖然初步跡象表明這種排序只需要一兩秒鐘,但我寧願在那段時間顯示進展 - 即我想每秒更新一次進度指示器。這比打開等待光標並讓程序凍結一段不確定的時間長度(即使只有幾秒鐘)更好。如何在C++排序期間監視/顯示進度
如果我使用類似std :: sort的東西,我可以使用比較函數來更新進度指示器,但我不知道「完成百分比」。我也可以將排序分解爲子排序,更新子排序之間的進度,然後合併。我最好的辦法可能是編寫自己的排序方法,儘管我不知道爲了獲得性能和std :: sort(並確保正確性)一樣好,需要付出多少努力。在任何情況下,該排序方法偶爾會向回調方法發送「完成百分比」。
我想知道是否有其他人遇到並解決了這個問題 - 我希望可能有一個標準庫中的排序方法,可以做我想做的,或者其他一些我沒有想到的技術。
更新:感謝迄今爲止的出色答案。有幾個非常好的建議,我將暫停選擇接受的答案,直到我有機會在即將到來的項目中測試這些想法。
更新2:我完成我的項目,而這竟然是一個非問題(至少對於客戶因爲它們會被銷售軟件,他們仍然可以從他們的客戶的反饋,將改變。他們的想法)。選擇一個被接受的答案是困難的,因爲有很多好的答案,但最終我選擇了一個關於合併排序的wiki文章,它有一個非常令人回味的動畫。所以如果我需要繼續這樣做,這是我會採取的第一個策略)。
就我個人而言,我會推遲添加這樣的功能,直到觀察到排序的真實表現。否則,它正在解決可能不存在的問題。你也可以走簡單的路線並在某種日誌文本控件或狀態欄中顯示「Sorting ...」。 – Reinderien 2010-06-22 16:30:15
@Reinderien:同意,如果沒有損壞,不要修復它。但我正試圖在這方面提前思考。而且我在3D圖形和幾何處理方面的經驗是,用戶會輕易地用任何比你夢寐以求的模型和數據來窒息的東西。 – brainjam 2010-06-22 16:34:38