Qt 守護程序,保活

2021-10-25 06:26:21 字數 1340 閱讀 1299

一台windows電腦,只允許乙個我方開發的軟體,並且設定了自定義桌面的方式,也就是說沒有桌面,軟體一旦崩潰或者無響應,那麼使用者只能是重啟電腦,體驗很差,所以單獨寫乙個守護程序,當主程序出現崩潰或者無響應的時候,重新啟動主程序。

1,利用程序間通訊的方式,主程序和守護程序傳送請求並回應請求,比如主程序向守護程序傳送心跳包,守護程序收到後回應,如果守護程序約定時間內收不到,則重新啟動主程序,實現方式:

(1),udp通訊

(2),qtro  qt 最新的程序間通訊方式,類似linux下的dbus。

2,守護程序 定時掃碼主程序是否存在,不存在則重啟。

開始利用了udp的方式進行實現,但是在執行乙個第三方sdk的時候,udp會阻塞,導致守護程序以為主程序掛掉,實際主程序沒有掛掉,只是慢了一些,並且不同機器,慢的時候還不一樣,所以最終選擇了 第二種方式,實現起來也特別簡單,後期有通訊需求,可以利用qtro的方式,並且大部分函式都是依賴系統原生。

1,定時器,每隔兩秒進行檢查,如果程序不存在後者程序存在但是未響應,則重啟啟動程式。

void maincontroller::sl_triggered()

else

}if(restart)

}

#include #include #includeusing namespace std;

typedef struct tagwndinfo

wndinfo, *lpwndinfo;

bool myenumproc(hwnd hwnd, lparam lparam)

}return true;

}

hwnd maincontroller::getwndhwnd(char *strexename)

//遍歷程序快照,輪流顯示每個程序的資訊

bool bmore = ::process32first(hprocesssnap, &pe32);

while (bmore)

}bmore = ::process32next(hprocesssnap, &pe32);

}//不要忘記清除掉snapshot物件

::closehandle(hprocesssnap);

return null;

}hwnd maincontroller::getprocessmainwnd(dword dwprocessid)

pro 檔案 -》libs +=user32.lib

掃碼有驚喜:

程序保活之雙程序守護

declare any non default types here with import statements inte ce iserviceaidlinte ce二 建立本地localservice public class localservice extends service loca...

android守護程序 常駐服務保活技術

這是乙個輕量級的庫,配置幾行 就可以實現在android上實現程序常駐,也就是在系統強殺下,以及360獲取root許可權下,clean master獲取root許可權下都無法殺死程序 支援系統2.3到6.0 支援大部分裝置,包括三星,華為,oppo,nexus,魅族等等 可以簡單對開機廣播進行保護 ...

程序保活方法

mysql proxy原始碼中,使用了一種程序保活的方法。這種方法的基本原理是 當父程序完成基本的初始化後,建立子程序,由子程序繼續後面的主體邏輯。而父程序wait子程序的退出狀態。一旦發現子程序是由於收到訊號而退出的,則重啟子程序。這種方法的實現 如下 include include includ...