【Qt】windows下检测是否连接外网

这里通过ping百度的网址进行判断是否连接外网

使用ping的命令:

ping www.baidu.com -n 2 -w 1000

其中-n 表示要发送的请求数,-w 表示等待每次回复的超时时间(毫秒)

用法:

bool checkPublicNet()
{
    QString networkCmd = "ping www.baidu.com -n 2 -w 500";
    QProcess process;
    process.start(networkCmd);
    process.waitForFinished();
    QString result = process.readAll();
    if(result.contains("TTL=")){
        return true;
    }
    else{
        return false;
    }

}

ping通返回会包含“TTL”,这个用法会阻塞主线程,如果要用非阻塞的方式需放在线程中执行

qt的线程有多种方式实现,下面使用QtConcurrent搭配QFuture实现

QFuture<bool> checkLocalNet()
{
    QString networkCmd = QString("ping www.baidu.com -n 2 -w 1000");
    auto check = [=]{
        QProcess process;
        process.start(networkCmd);
        process.waitForFinished();
        QString result = process.readAll();
        if(result.contains("TTL=")){
            return true;
        }
        else{
            return false;
        }
    };
    //放在线程中,防止界面卡住
    QFuture<bool> future= QtConcurrent::run(check);

    return future;
}

运用:

QFuture<bool> future = checkLocalNet();
QFutureWatcher<void> *watcher = new QFutureWatcher<void>(this);

connect(watcher, &QFutureWatcher<void>::finished,[=]{
    if(future.result()){
        ...
    }
});
watcher->setFuture(future);

省略号后是要实现的内容

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值