资源简介
没有任何人敢保证自己写的程序没有任何BUG,尤其是在商业项目中,程序量越大,复杂度越高,出错的概率越大,尤其是现场环境千差万别,和当初本地电脑测试环境很可能不一样,有很多特殊情况没有考虑到,如果需要保证程序7*24小时运行,则需要想一些办法能够让程序死了能够活过来,在嵌入式linux上,大部分会采用看门狗的形式来处理,程序打开看门狗驱动后,定时喂狗,一旦超过规定的时间,则硬件软复位等。这种方式相对来说比较可靠,如果需要在普通PC机上运行怎办呢?本篇文章提供一个软件实现守护进程的办法,原理就是udp通信,单独写个守护进程程序,专门负责检测主程序是否存在,不存在则启动。主程序只需要启动live类监听端口,收到hello就回复ok就行。
为了使得兼容任意程序,特意提炼出来共性,增加了多种设置。
1:可设置检测的程序名称。
2:可设置udp通信端口。
3:可设置超时次数。
4:自动记录已重启次数。
5:自动记录最后一次重启时间。
6:是否需要重新刷新桌面。
7:可重置当前重启次数和最后重启时间。
8:自动隐藏的托盘运行或者后台运行。
9:提供界面设置程序名称已经开启和暂停服务。
代码片段和文件信息
#include “applive.h“
#include “qmutex.h“
#include “qudpsocket.h“
#include “qstringlist.h“
#include “qapplication.h“
#include “qdatetime.h“
#include “qdebug.h“
#define TIMEMS qPrintable(QTime::currentTime().toString(“HH:mm:ss zzz“))
QScopedPointer AppLive::self;
AppLive *AppLive::Instance()
{
if (self.isNull()) {
QMutex mutex;
QMutexLocker locker(&mutex);
if (self.isNull()) {
self.reset(new AppLive);
}
}
return self.data();
}
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()));
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-03-02 14:23 live\
文件 82 2019-03-02 14:18 live\live.pro
目录 0 2019-03-02 14:17 live\livedemo\
文件 1666 2018-05-30 14:49 live\livedemo\applive.cpp
文件 446 2018-05-30 14:57 live\livedemo\applive.h
文件 201 2019-03-02 14:06 live\livedemo\frmmain.cpp
文件 284 2019-03-02 14:06 live\livedemo\frmmain.h
文件 495 2019-03-02 14:05 live\livedemo\frmmain.ui
文件 570 2019-03-02 14:04 live\livedemo\livedemo.pro
文件 23658 2019-03-02 14:17 live\livedemo\livedemo.pro.user
文件 880 2019-03-02 14:05 live\livedemo\main.cpp
目录 0 2019-03-02 14:17 live\livetool\
文件 2487 2019-03-02 14:10 live\livetool\app.cpp
文件 849 2019-03-02 13:41 live\livetool\app.h
文件 5584 2019-03-02 14:16 live\livetool\frmmain.cpp
文件 833 2019-03-02 14:15 live\livetool\frmmain.h
文件 2773 2019-03-02 13:25 live\livetool\frmmain.ui
文件 595 2019-03-02 13:50 live\livetool\livetool.pro
文件 29845 2019-03-02 14:17 live\livetool\livetool.pro.user
文件 1301 2019-03-02 14:15 live\livetool\main.cpp
文件 67646 2016-06-15 15:26 live\livetool\main.ico
文件 92 2019-03-02 13:50 live\livetool\main.qrc
文件 2249 2018-08-22 21:39 live\livetool\trayicon.cpp
文件 1826 2018-08-19 19:47 live\livetool\trayicon.h
目录 0 2019-03-02 14:12 live\snap\
文件 10924 2019-03-02 14:11 live\snap\QQ截图20190302141124.png
文件 16677 2019-03-02 14:11 live\snap\QQ截图20190302141129.png
文件 13291 2019-03-02 14:11 live\snap\QQ截图20190302141147.png
- 上一篇:神经网络与深度学习 吴岸城 带目录
- 下一篇:QT编写的串口设备调试工具终极版
相关资源
- QT编写的串口设备调试工具终极版
- qt写的一个动感界面
- qt5串口程序
- QT获取天气程序
- myElectronicDictionary.rar
- Delaunay三角剖分
- vicsek模型的Qt实现
- QT4实现的给予QFTP类的FTP客户端程序
- QT进制间的转换,可供新手学习
- Qt实现的连连看游戏源码
- arm板上实现usb摄像头采集及显示(q
- QT闹钟alarm
- qt gps 定位系统源代码
- QT 基于mainwindow添加一个文件菜单
- 简单环形条格进度条
- qtjambi-eclipse-integration-4.5.2_01
- 基于TCP的网络聊天程序
- linux qt4.7 v4l2 YUV(YUYV) mmap 显示视频
- 基于QT的局域网聊天系统215855
- qt入门程序——读取txt文件
- 一个简单的 QT5编写的 串口工具代码
- 一个简单QT5编写的录音机代码
- Qt绘图实现
- 嵌入式Linux系统设计QT计算器
- qt记事本(含详细解释)
- qt 实现数据库操作和显示
- Qt利用帧动画实现所有动画效果(QW
- pyqt 软件打开和关闭淡入淡出的动画效
- Qt窗口传值
- QIM 局域网聊天程序
评论
共有 条评论