前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QProcess使用waitForFinished的小坑

QProcess使用waitForFinished的小坑

作者头像
Qt君
发布2019-10-12 15:59:57
2.4K0
发布2019-10-12 15:59:57
举报
文章被收录于专栏:跟Qt君学编程

我们使用以下接口都会有超时机制,主要是避免长时间的阻塞。但有些类似有超时机制的接口在使用上就需要注意了。

代码语言:javascript
复制
bool QAbstractSocket::waitForBytesWritten(int msecs = 30000)
bool QAbstractSocket::waitForConnected(int msecs = 30000)
bool QAbstractSocket::waitForDisconnected(int msecs = 30000)
bool QAbstractSocket::waitForReadyRead(int msecs = 30000)

  一般我们使用QProcess执行命令时都会执行waitForFinished等待程序执行完成。细看接口可以看到它有默认的超时时间(30s),如果超过30s就会中断执行。如果我们执行某些耗时操作又没有设置超时时间则会导致一直中断执行从而得不到想要的结果。

代码语言:javascript
复制
bool QProcess::waitForFinished(int msecs = 30000)

  下列例子由于没有设置waitForFinished超时时间,如果gzip解压时间超过30s就得不到想要的结果。

代码语言:javascript
复制
QProcess gzip;
gzip.start("gzip –d /opt/etc.zip.gz");
if (!gzip.waitForStarted())
    return false;
    
if (!gzip.waitForFinished())
    return false;

QByteArray result = gzip.readAll();

  应该设置可预计的超时时间或不可预计的执行时间就应该设置waitForFinished(-1)参数(直到执行完成)。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档