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;
}
相关推荐
.道阻且长.20 小时前
C++ string 操作指南:接口解析
java·c语言·开发语言·c++
蚰蜒螟20 小时前
Java 对象的内存密语:从字段偏移量计算到 Unsafe 访问的完整链路
java·开发语言
星辰_mya20 小时前
CountDownLatch深度解析
java·开发语言·后端·架构
laplaya20 小时前
使用 vcpkg 管理 C++ 项目中的依赖
开发语言·c++
feixing_fx21 小时前
选择器的威力——深入理解优先级计算与层叠规则
开发语言·前端·css·前端框架·html
6v6-博客21 小时前
C语言字符串中空格的表示方法
c语言·开发语言
geovindu21 小时前
python: speech to text offline
开发语言·python·语音识别
于指尖飞舞21 小时前
java后端面试题(多线程极简)
java·开发语言
techdashen21 小时前
从 Windows 的 ping.exe 入手:动态库、调用约定与 Rust FFI
开发语言·windows·rust
AI科技星21 小时前
数术宇宙:零一无穷创世史诗
开发语言·网络·量子计算·拓扑学