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;
}
相关推荐
Zachery Pole3 分钟前
JAVA_06_方法
java·开发语言
LSL666_5 分钟前
10 集群
java·开发语言·数据库·redis·集群
好家伙VCC5 分钟前
# 发散创新:基于Python的轻量级测试框架设计与实践 在现代软件开发中,**自动化
java·开发语言·python·自动化
NGC_661117 分钟前
Java异常体系
开发语言·python
knighthood200129 分钟前
PCL1.14.0+VTK9.3.0+Qt5.15.2实现加载点云遇到的问题解决
开发语言·qt
叙白冲冲1 小时前
JAVA中栈的使用
java·开发语言
rabbitlzx1 小时前
《Async in C# 5.0》第十四章 深入探讨编译器对于async的转换
java·开发语言·c#·异步·asynchronous
神明不懂浪漫1 小时前
【第十三章】操作符详解,预处理指令详解
c语言·开发语言·经验分享·笔记
MediaTea1 小时前
Python:类型槽位
开发语言·python
郝学胜-神的一滴1 小时前
深入解析Effective Modern C++条款35:基于任务与基于线程编程的哲学与实践
开发语言·数据结构·c++·程序人生