QT 检测是否有网络

一、模拟一个请求去判断是否有网,此处需要加个事件循环,实现阻塞等待网络请求的完成。
这是因为Qt的网络模块是基于事件驱动的,网络请求的完成是通过信号和槽机制来通知的。在没有事件循环的情况下,主线程会立即执行到return语句,而此时网络请求可能还没有完成,导致无法获取到正确的网络请求结果。

二、最后在加个定时器,就算没有等到网络请求返回,超时后也会退出事件循环,可以避免网络请求长时间阻塞主线程。

cpp 复制代码
bool checkNetwork(int nTimeout = 3000)
{
	QNetworkAccessManager *netManager = new QNetworkAccessManager();
	QNetworkRequest request(QUrl("https://www.baidu.com"));
	QNetworkReply* reply = netManager->get(request);

	QEventLoop loop;
	QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
	QTimer::singleShot(nTimeout, &loop, SLOT(quit()));
	loop.exec(QEventLoop::ExcludeUserInputEvents);

	return reply->error() == QNetworkReply::NoError;
}
相关推荐
IOT-Power4 分钟前
QT的解耦方式
qt
lubiii_8 分钟前
Aircrack-ng工具使用原理与实操笔记
开发语言·网络·web安全·php
weixin_3077791311 分钟前
Jenkins Metrics 插件全解析:从数据采集到智能监控的实践指南
运维·开发语言·架构·jenkins
阿拉伯柠檬12 分钟前
实现一个异步操作线程池
开发语言·数据结构·c++·面试
半瓶榴莲奶^_^14 分钟前
后端Web进阶(AOP)
java·开发语言
raoxiaoya17 分钟前
ADK-Go:Golang开发AI Agent
开发语言·人工智能·golang
一只乔哇噻18 分钟前
java后端工程师+AI大模型开发进修ing(研一版‖day61)
java·开发语言·学习·算法·语言模型
我爱学习_zwj25 分钟前
Node.js模块管理:CommonJS vs ESModules
开发语言·前端·javascript
ldmd28429 分钟前
Go语言实战:入门篇-6:锁、测试、反射和低级编程
开发语言·后端·golang
bing.shao33 分钟前
Golang中实现基于角色的访问控制(RBAC)
开发语言·后端·golang