本篇内容主要讲解“Qt程序守护进程怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Qt程序守护进程怎么实现”吧!
没有任何人敢保证自己写的程序没有任何BUG,尤其是在商业项目中,程序量越大,复杂度越高,出错的概率越大,尤其是现场环境千差万别,和当初本地电脑测试环境很可能不一样,有很多特殊情况没有考虑到,如果需要保证程序7*24小时运行,则需要想一些办法能够让程序死了能够活过来,在嵌入式linux上,大部分会采用看门狗的形式来处理,程序打开看门狗驱动后,定时喂狗,一旦超过规定的时间,则硬件软复位等。这种方式相对来说比较可靠,如果需要在普通PC机上运行怎办呢?本篇文章提供一个软件实现守护进程的办法,原理就是udp通信,单独写个守护进程程序,专门负责检测主程序是否存在,不存在则启动。主程序只需要启动live类监听端口,收到hello就回复ok就行。 为了使得兼容任意程序,特意提炼出来共性,增加了多种设置。
主要功能:
可设置检测的程序名称。
可设置udp通信端口。
可设置超时次数。
自动记录已重启次数。
自动记录最后一次重启时间。
是否需要重新刷新桌面。
可重置当前重启次数和最后重启时间。
自动隐藏的托盘运行或者后台运行。
提供界面设置程序名称已经开启和暂停服务。
AppLive::AppLive(QObject *parent) : QObject(parent) { udpServer = new QUdpSocket(this); QString name = qApp->applicationFilePath(); QStringList list = name.split("/"); appName = list.at(list.count() - 1).split(".").at(0); } void AppLive::readData() { QByteArray tempData; do { tempData.resize(udpServer->pendingDatagramSize()); QHostAddress sender; quint16 senderPort; udpServer->readDatagram(tempData.data(), tempData.size(), &sender, &senderPort); QString data = QLatin1String(tempData); if (data == "hello") { udpServer->writeDatagram(QString("%1OK").arg(appName).toLatin1(), sender, senderPort); } } while (udpServer->hasPendingDatagrams()); } bool AppLive::start(int port) { bool ok = udpServer->bind(port); if (ok) { connect(udpServer, SIGNAL(readyRead()), this, SLOT(readData())); qDebug() << TIMEMS << "Start AppLive Ok"; } return ok; } void AppLive::stop() { udpServer->abort(); disconnect(udpServer, SIGNAL(readyRead()), this, SLOT(readData())); }
到此,相信大家对“Qt程序守护进程怎么实现”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。