[問題] 請益一下有關ProcessBar

看板C_and_CPP (C/C++)作者 (ㄚ魚!!)時間14年前 (2012/03/06 15:30), 編輯推噓0(0015)
留言15則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS 2003 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) MFC 問題(Question): 我嘗試著說明狀況 希望能說明的讓大家明瞭 目前我有一個大迴圈(假設1~100),在跑的時候會計算個10秒左右 客戶反應:等這麼久 不知道是不是當了 所以我打算跳一個對話盒 上面嵌一個Process Bar 用以表示迴圈進度 餵入的資料(Input): i=1~100 ProcessBar.SetPos(i); 預期的正確結果(Expected Output): 預期能夠像安裝軟體那樣 可以顯示 Process到哪了 錯誤結果(Wrong Output): 可是出來的結果 一開始的幾個迴圈應該還沒大量計算 所以Process很正常的顯示 一格格遞增 後來可能是有大量計算 整個Process Bar不動 甚至對話盒也全白(標題還顯示無回應) 但是並非當機 等完10秒左右 結果就跑出來了.... 這樣這對話盒的意義就不見了 都是要等10秒的話 多跳一個不會動 白屏的對話盒 感覺就是畫蛇添足.... 請問是否有辦法讓對話盒能持續顯示Process嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.112.106

03/06 15:50, , 1F
像這種大量計算最好是另開thread做,讓UI顯示進度
03/06 15:50, 1F

03/06 16:14, , 2F
您好,請問要怎麼分開呢?我把計算丟到thread中
03/06 16:14, 2F

03/06 16:15, , 3F
可是觸發Process更新好像也在Thread中 這樣好像一樣?
03/06 16:15, 3F

03/06 16:27, , 4F
先讓更新UI跟計算的部分在不同的thread,防止UI卡死
03/06 16:27, 4F

03/06 16:28, , 5F
然後讓UI可以知道計算進度,方法有很多
03/06 16:28, 5F

03/06 16:29, , 6F
譬如讓計算的thread每算一小部分就送訊息給UI,
03/06 16:29, 6F

03/06 16:31, , 7F
或是計算的thread設進度值,讓UI每隔一定時間去讀這個值
03/06 16:31, 7F

03/06 16:33, , 8F
只要不要讓UI卡死,讓user知道有在動作就行了
03/06 16:33, 8F

03/06 17:57, , 9F
謝謝 概念我知道可是一直試不成功 UI還是一直HANG住
03/06 17:57, 9F

03/06 17:58, , 10F
後來前輩叫我去出貨電腦上試試看 果然沒問題了OTL
03/06 17:58, 10F

03/06 17:59, , 11F
想說都開了Thread還HANG住真的沒天良 原來是電腦爛
03/06 17:59, 11F

03/06 18:05, , 12F
我有遇過一個情形是計算的thread一直佔住CPU,讓UI看起來
03/06 18:05, 12F

03/06 18:07, , 13F
像死掉一樣。所以我計算的thread每算一小部分就sleep(1);
03/06 18:07, 13F

03/06 18:08, , 14F
讓CPU可以跑其他的thread,問題就解決了。你可以試試看
03/06 18:08, 14F

03/07 08:46, , 15F
原來還有這招!! 太感謝了!!!
03/07 08:46, 15F
文章代碼(AID): #1FLRq8WL (C_and_CPP)
文章代碼(AID): #1FLRq8WL (C_and_CPP)