资源简介
没有任何人敢保证自己写的程序没有任何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 Creator5)
- vtk QT做的三维地质可视化系统2of2
- Qt局域网聊天软件
- Qt Creator opengl实现四元数鼠标控制轨迹
- QT局域网聊天系统(基于QT5.修改过)
- qt-电子点菜系统
- C 餐厅叫号系统(QT平)
- QT 实现文件下载
- qt图像处理
- QT,JPEG解码源代码(已完成)
- Qt 播放音频文件
- Qt 读取16进制的data文件
- MQTT+串口(usart)透传
- 易语言QQTEA算法源码
- VC工程转Qt工程文件的工具
- MQTT推送Demo
- 基于Linux、QT的视频监控系统的设计与
- Qt 百度地图 定位
- QT酷炫界面开发指南《QmlBook》
- Ubuntu下操作Excel,qt代码
- Qt图片浏览器 --基于Qt的Graphics View f
- qtnribbon2破解
- Qt软件开发 完整项目代码
- MQTT_3.1protocol_Specific中文版
- 在QT中使用RTP进行视频的采集和传输
- Mini6410 Qt4和Qtopia编程开发指南
- Qt实现Code39条形码
- qt_ffmpeg_mp4_export_and_import.zip
- QT5.5入门与项目实战
- Huffman Compress 霍夫曼编码 压缩 解压缩
评论
共有 条评论