Qt程序守護(hù)進(jìn)程怎么實(shí)現(xiàn)

本篇內(nèi)容主要講解“Qt程序守護(hù)進(jìn)程怎么實(shí)現(xiàn)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Qt程序守護(hù)進(jìn)程怎么實(shí)現(xiàn)”吧!

網(wǎng)站制作、做網(wǎng)站的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給創(chuàng)新互聯(lián)一個(gè)展示的機(jī)會(huì)來(lái)證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來(lái)新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。

一、前言

沒有任何人敢保證自己寫的程序沒有任何BUG,尤其是在商業(yè)項(xiàng)目中,程序量越大,復(fù)雜度越高,出錯(cuò)的概率越大,尤其是現(xiàn)場(chǎng)環(huán)境千差萬(wàn)別,和當(dāng)初本地電腦測(cè)試環(huán)境很可能不一樣,有很多特殊情況沒有考慮到,如果需要保證程序7*24小時(shí)運(yùn)行,則需要想一些辦法能夠讓程序死了能夠活過(guò)來(lái),在嵌入式linux上,大部分會(huì)采用看門狗的形式來(lái)處理,程序打開看門狗驅(qū)動(dòng)后,定時(shí)喂狗,一旦超過(guò)規(guī)定的時(shí)間,則硬件軟復(fù)位等。這種方式相對(duì)來(lái)說(shuō)比較可靠,如果需要在普通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就行。 為了使得兼容任意程序,特意提煉出來(lái)共性,增加了多種設(shè)置。

主要功能:

  1. 可設(shè)置檢測(cè)的程序名稱。

  2. 可設(shè)置udp通信端口。

  3. 可設(shè)置超時(shí)次數(shù)。

  4. 自動(dòng)記錄已重啟次數(shù)。

  5. 自動(dòng)記錄最后一次重啟時(shí)間。

  6. 是否需要重新刷新桌面。

  7. 可重置當(dāng)前重啟次數(shù)和最后重啟時(shí)間。

  8. 自動(dòng)隱藏的托盤運(yùn)行或者后臺(tái)運(yùn)行。

  9. 提供界面設(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()));
}

三、效果圖

Qt程序守護(hù)進(jìn)程怎么實(shí)現(xiàn)

到此,相信大家對(duì)“Qt程序守護(hù)進(jìn)程怎么實(shí)現(xiàn)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

分享名稱:Qt程序守護(hù)進(jìn)程怎么實(shí)現(xiàn)
文章鏈接:http://muchs.cn/article42/ppjehc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、用戶體驗(yàn)標(biāo)簽優(yōu)化、網(wǎng)站導(dǎo)航企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化