一台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...