QProcess使用waitForFinished的小坑

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

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就会中断执行。如果我们执行某些耗时操作又没有设置超时时间则会导致一直中断执行从而得不到想要的结果。

bool QProcess::waitForFinished(int msecs = 30000)

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

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)参数(直到执行完成)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值