QT ping网络通断
其中 -n 为请求数,-w 为请求超时时间。为了更快获取网络状态结果,调整这两个参数即可。例如:
ping www.baidu.com -n 2 -w 500
- 1
其含义为向www.baidu.com请求两包数据,每包数据超时时间为500ms。系统调用这个命令,就能在1s内获取网络状态了。但是如果在主线程中直接调用该指令,会存在阻塞,导致界面卡顿。所以,建议通过线程来调用ping指令。
如下为示例,供参考,
networkThread.h
#ifndef NETWORKTHREAD_H #define NETWORKTHREAD_H #include <QProcess> #include <QThread> class networkThread: public QThread { Q_OBJECT //一定要加这个 public: networkThread(); virtual void run(); void stop(); signals: void signalsNetwork_States(bool state); private: bool flagRunning; //线程运行标志 QProcess *network_process; }; #endif // NETWORKTHREAD_H
#include "networkThread.h" networkThread::networkThread() { flagRunning = true; } void networkThread::run() { QString network_cmd = "ping www.baidu.com -n 2 -w 500"; QString result; network_process = new QProcess(); //不要加this while(flagRunning) { network_process->start(network_cmd); //调用ping 指令 network_process->waitForFinished(); //等待指令执行完毕 result = network_process->readAll(); //获取指令执行结果 if(result.contains(QString("TTL="))) //若包含TTL=字符串则认为网络在线 { emit signalsNetwork_States(1); //在线 } else { emit signalsNetwork_States(0); //离线 } sleep(1); //加sleep降低CPU占用率 } } void networkThread::stop() { flagRunning = false; }
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include "networkThread.h" //包含头文件 namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); public slots: void slot_updateNetwork(bool state); //更新网络状态 private: Ui::Widget *ui; networkThread *netWork_thread; }; #endif // WIDGET_H
widget.cpp
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); netWork_thread= new networkThread(); connect(netWork_thread, SIGNAL(signalsNetwork_States(bool)), this, SLOT(slot_updateNetwork(bool))); netWork_thread->start(); //开启网络检测线程 } Widget::~Widget() { delete ui; } void Widget::slot_updateNetwork(bool state) { if(state) ui->label->setText("在线"); else ui->label->setText("离线"); }
欢迎讨论,相互学习。
cdtxw@foxmail.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2023-12-05 实例化报错-OpenCvSharp.Internal.NativeMethods”的类型初始值设定项引发异常