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/cn.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灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP