C_and_CPP 板


LINE

開發平台(Platform): (Ex: Win10, Linux, ...) windows 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) vs2015 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) qt5.7 問題(Question): 目前會有一個功能用到7z.exe去壓縮某個資料夾的檔案(壓成ZIP) 壓完之後馬上上傳 但好像因為執行的時間 所以壓縮之後要Sleep(2000) 睡大概兩秒 但Sleep好像是整個程式都會睡著 目前這個function是用QTimer去執行的 請問有其他辦法可以解決這個停頓嗎 用Sleep好像注定會延遲 這樣我有其他辦法等待EXE把檔案壓成ZIP這段時間嗎 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.124.46.66
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1491899642.A.368.html ※ 編輯: checkIO (59.124.46.66), 04/11/2017 16:34:46 ※ 編輯: checkIO (59.124.46.66), 04/11/2017 16:52:27
1F:推 Hazukashiine: 所以有 sleep, Sleep, and SLEEP? 04/11 18:31
Sleep
2F:推 s4300026: 寫在執行7.zip副程式最後面? 04/11 18:37
跑到我上傳那行的瞬間不一定會壓完zip
3F:→ MOONRAKER: Sleep: sleep a sound sleep 04/11 18:41
4F:→ MOONRAKER: SLEEP: sleep like hell (ignores SIGKILL) 04/11 18:41
5F:→ chengcti: 在main thread sleep, 會讓 windows event 無法處理 04/11 20:19
6F:→ uranusjr: 用 sleep 就錯了, 先討論執行外部程式的方法吧 04/11 21:14
討論的意思是 壓縮的時機嗎?
7F:推 Hazukashiine: 就我的經驗 程式會需要睡覺通常是從設計上就有問題 04/11 22:37
8F:→ Hazukashiine: 然後看到:「但好像...」 我就覺得你更不該用 Sleep 04/11 22:38
是因為這句話 我不知道Sleep是在做啥而在玩火嗎
9F:→ Hazukashiine: Compressing 應該是一個 blocking operations 04/11 22:40
10F:→ Hazukashiine: 你大可等待返回值再決定下一步 而不是用等待 04/11 22:40
11F:→ Hazukashiine: if (compress_file(...) != OK) xxx then yyy; 之類 04/11 22:42
12F:→ Hazukashiine: 重點是為什麼你一定要等兩秒? 04/11 22:43
因為我不確定ZIP壓成功的時間 所以一定要等他 ZIP有壓成功 才能跑上傳 使用Sleep在那時候看起來最直覺... 如果我改成這樣 用while迴圈去確認檔案是否存在 存在才跳出迴圈呢 //call cmd 7z.exe to zip file and wait finished int count = 0 bool zipFileExist = false while(!zipFileExist){ count += 1 if(count %1000 == 0){ //check zip file exist; if (file exist){ zipFileExist = true; } } } // do upLoad
13F:→ Hazukashiine: ㄜ 這種代碼暫時用勉強可以 但是你 zip 那邊怎麼寫 04/11 22:55
14F:→ Hazukashiine: 我猜你大 call 了一個 shell 到外面去平行執行了? 04/11 22:56
yes 我用cmd call 7z.exe去壓縮某個資料夾內部的所有檔案
15F:→ Hazukashiine: 我是我記得 system() 不是阻塞的?至少在 Linux 是 04/11 22:57
16F:推 EdisonX: system 是阻塞的沒錯,但也有非阻塞的背景執行,如WinExe 04/12 00:02
17F:→ EdisonX: c。原po呼叫7z壓縮變非阻塞是怎回事? 04/12 00:02
18F:推 steve1012: 直接讓她block 不就好了 為啥要non block又busy waitin 04/12 00:04
19F:→ steve1012: g .... 04/12 00:04
因為我上傳是背景上傳 USER可能會在那段時間去操作UI 所以用了Sleep對ui操作會非常有感覺的頓...
20F:推 HMKRL: sleep就整個ui死掉啦 04/12 09:55
這樣請問Sleep到底是準備用在? ※ 編輯: checkIO (59.124.46.82), 04/12/2017 13:23:26
21F:→ MOONRAKER: 就不接受打擾的時候阿 04/12 14:40
22F:推 steve1012: 不太懂 上傳直接接在blocking 的壓縮後面不行麼? 還是 04/13 00:42
23F:→ steve1012: 壓縮沒有另外的thread 會卡住整個程式? 04/13 00:42
24F:→ steve1012: 或是用conditional variable 讓壓縮完以後去把上傳的th 04/13 00:42
25F:→ steve1012: read 叫醒 04/13 00:42
26F:推 EdisonX: 如果你的壓縮是整個動作的最後一步,其實就是要讓它卡! 04/16 03:55
27F:→ EdisonX: 頂多跑一個在跑的訊息條dialog讓user知道還沒跑完。如果 04/16 03:55
28F:→ EdisonX: 要壓很久,再考慮開thread,並在跳出來的dialog上加上can 04/16 03:55
29F:→ EdisonX: cel按鈕,一般設計是這樣。 04/16 03:55
不是 是壓完之後要直接上傳到SERVER 但今天接上主程式的時候發現我的作法會出現記憶體讀取錯誤... ※ 編輯: checkIO (1.160.87.49), 04/17/2017 20:42:13
30F:推 rod4919: 可以用 QProcess 開 7z.exe 04/29 20:08







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP