您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Qt程序守護(hù)進(jìn)程怎么實(shí)現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Qt程序守護(hù)進(jìn)程怎么實(shí)現(xiàn)”吧!
沒有任何人敢保證自己寫的程序沒有任何BUG,尤其是在商業(yè)項(xiàng)目中,程序量越大,復(fù)雜度越高,出錯(cuò)的概率越大,尤其是現(xiàn)場(chǎng)環(huán)境千差萬別,和當(dāng)初本地電腦測(cè)試環(huán)境很可能不一樣,有很多特殊情況沒有考慮到,如果需要保證程序7*24小時(shí)運(yùn)行,則需要想一些辦法能夠讓程序死了能夠活過來,在嵌入式linux上,大部分會(huì)采用看門狗的形式來處理,程序打開看門狗驅(qū)動(dòng)后,定時(shí)喂狗,一旦超過規(guī)定的時(shí)間,則硬件軟復(fù)位等。這種方式相對(duì)來說比較可靠,如果需要在普通PC機(jī)上運(yùn)行怎辦呢?本篇文章提供一個(gè)軟件實(shí)現(xiàn)守護(hù)進(jìn)程的辦法,原理就是udp通信,單獨(dú)寫個(gè)守護(hù)進(jìn)程程序,專門負(fù)責(zé)檢測(cè)主程序是否存在,不存在則啟動(dòng)。主程序只需要啟動(dòng)live類監(jiān)聽端口,收到hello就回復(fù)ok就行。 為了使得兼容任意程序,特意提煉出來共性,增加了多種設(shè)置。
主要功能:
可設(shè)置檢測(cè)的程序名稱。
可設(shè)置udp通信端口。
可設(shè)置超時(shí)次數(shù)。
自動(dòng)記錄已重啟次數(shù)。
自動(dòng)記錄最后一次重啟時(shí)間。
是否需要重新刷新桌面。
可重置當(dāng)前重啟次數(shù)和最后重啟時(shí)間。
自動(dòng)隱藏的托盤運(yùn)行或者后臺(tái)運(yùn)行。
提供界面設(shè)置程序名稱已經(jīng)開啟和暫停服務(wù)。
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())); }
到此,相信大家對(duì)“Qt程序守護(hù)進(jìn)程怎么實(shí)現(xiàn)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。