[問題] 執行緒問題
開發平台(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://www.ptt.cc/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
推
04/11 18:31, , 1F
04/11 18:31, 1F
Sleep
推
04/11 18:37, , 2F
04/11 18:37, 2F
跑到我上傳那行的瞬間不一定會壓完zip
→
04/11 18:41, , 3F
04/11 18:41, 3F
→
04/11 18:41, , 4F
04/11 18:41, 4F
→
04/11 20:19, , 5F
04/11 20:19, 5F
→
04/11 21:14, , 6F
04/11 21:14, 6F
討論的意思是 壓縮的時機嗎?
推
04/11 22:37, , 7F
04/11 22:37, 7F
→
04/11 22:38, , 8F
04/11 22:38, 8F
是因為這句話 我不知道Sleep是在做啥而在玩火嗎
→
04/11 22:40, , 9F
04/11 22:40, 9F
→
04/11 22:40, , 10F
04/11 22:40, 10F
→
04/11 22:42, , 11F
04/11 22:42, 11F
→
04/11 22:43, , 12F
04/11 22:43, 12F
因為我不確定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
→
04/11 22:55, , 13F
04/11 22:55, 13F
→
04/11 22:56, , 14F
04/11 22:56, 14F
yes 我用cmd call 7z.exe去壓縮某個資料夾內部的所有檔案
→
04/11 22:57, , 15F
04/11 22:57, 15F
推
04/12 00:02, , 16F
04/12 00:02, 16F
→
04/12 00:02, , 17F
04/12 00:02, 17F
推
04/12 00:04, , 18F
04/12 00:04, 18F
→
04/12 00:04, , 19F
04/12 00:04, 19F
因為我上傳是背景上傳
USER可能會在那段時間去操作UI 所以用了Sleep對ui操作會非常有感覺的頓...
推
04/12 09:55, , 20F
04/12 09:55, 20F
這樣請問Sleep到底是準備用在?
※ 編輯: checkIO (59.124.46.82), 04/12/2017 13:23:26
→
04/12 14:40, , 21F
04/12 14:40, 21F
推
04/13 00:42, , 22F
04/13 00:42, 22F
→
04/13 00:42, , 23F
04/13 00:42, 23F
→
04/13 00:42, , 24F
04/13 00:42, 24F
→
04/13 00:42, , 25F
04/13 00:42, 25F
推
04/16 03:55, , 26F
04/16 03:55, 26F
→
04/16 03:55, , 27F
04/16 03:55, 27F
→
04/16 03:55, , 28F
04/16 03:55, 28F
→
04/16 03:55, , 29F
04/16 03:55, 29F
不是 是壓完之後要直接上傳到SERVER
但今天接上主程式的時候發現我的作法會出現記憶體讀取錯誤...
※ 編輯: checkIO (1.160.87.49), 04/17/2017 20:42:13
推
04/29 20:08, , 30F
04/29 20:08, 30F