#include "updaterthread.h" #include "qapplication.h" #include "qdir.h" #include #include #include #include #include bool isNetworkAvailable() { QNetworkAccessManager manager; QEventLoop loop; // 进行一个简单的GET请求 QNetworkReply *reply = manager.get(QNetworkRequest(QUrl("http://ver.stem993.cn/ping"))); // 等待直到请求完成 QObject::connect(reply, &QNetworkReply::finished, [&]() { loop.quit(); }); loop.exec(); // 事件循环 // 检查请求是否成功 bool success = reply->error() == QNetworkReply::NoError; QString response = reply->readAll(); reply->deleteLater(); // 清理 return success && response == "OK"; } bool updateServer() { return true; } bool runUpdate() { const QString app_version = qApp->applicationVersion(); const QString pid = QString::number(qApp->applicationPid()); QStringList arg; arg << app_version << pid << "http://ver.stem993.cn/api/v1/sys/ver/check_for_update"; arg << qApp->applicationFilePath(); const QString program = qApp->applicationDirPath() + "/../updater.exe"; bool isrun = QProcess::startDetached(program, arg); if (isrun == false) { // 这里主要是为了 收集错误信息 运行肯定是运行不了的 QProcess process; process.start(program, arg); if (!process.waitForStarted()) { qDebug() << "Error: Process failed to start."; qDebug() << "Error String:" << process.errorString(); return false; } // 如果需要,可以连接信号以获取标准输出和标准错误 QObject::connect(&process, &QProcess::readyReadStandardOutput, [&]() { qDebug() << "Output:" << process.readAllStandardOutput(); }); QObject::connect(&process, &QProcess::readyReadStandardError, [&]() { qDebug() << "Error:" << process.readAllStandardError(); }); // 等待进程结束 process.waitForFinished(); } return isrun; } UpdaterThread::UpdaterThread(QObject *parent) : QThread(parent) {} void UpdaterThread::run() { // 首先执行一次 if (isNetworkAvailable()) { if (runUpdate()) { } updateServer(); } QElapsedTimer timer; // 创建高精度计时器 timer.start(); // 启动计时器 while (true) { // 校验网络 if (timer.elapsed() >= 3600000) { // 检查是否经过1小时(3600000毫秒) timer.restart(); // 重新启动计时器 if (isNetworkAvailable()) { if (runUpdate()) { } updateServer(); } } msleep(1000); // 休息1秒 } }