程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 軟件看門狗:別讓你的程序沒有響應

軟件看門狗:別讓你的程序沒有響應

編輯:vc教程

一.概述

一些重要的程序,必須讓它一直跑著;而且還要時時關心它的狀態——不能讓它出現死鎖現象。當然,如果一個主程序會出現死鎖,肯定是設計或者編程上的失誤。我們首要做的事是,把這個Bug揪出來。但如果時間緊迫,這個Bug又“飄忽不定”,那麼,我們還是先寫一個軟件“看門狗”,暫時應一下急吧。

“看門狗”的需求描述:“看門狗”的運行不出現界面窗口,具有一定的隱蔽性;定時判斷目標進程是否運行在當前中,如果沒有則啟動目標進程;判斷目標進程是否“沒有響應”,如果是則終止目標進程;如果目標進程“沒有響應”的次數超過一定的數量,則將計算機系統重啟。

二.預備知識

首先要介紹兩個主要的函數,能夠判斷目標進程是否“沒有響應”。在User32.dll中(沒有文檔公開),Win2k/NT下的IsHungAppWindow和Win9X下的IsHungThread;前者是以一個窗口句柄作為參數,後者是以線程ID作為參數。我們可以通過VC開發工具的Depends查到這兩個函數。

要使用這兩個函數,我們必須先動態導入,如下:

if (m_hUser32 == NULL)
{
   m_hUser32 = GetModuleHandle("USER32.DLL");
}
if (m_hUser32)
{
   m_IsHungNT = (HUNG_FUNNT) GetProcAddress(m_hUser32, "IsHungAppWindow");
   m_IsHung9X = (HUNG_FUN9X) GetProcAddress(m_hUser32, "IsHungThread");
}

另外,還有如下知識點:

1.  如何讓窗口隱藏(當然通過Windows任務管理器還是可以看到的)

在框架窗口類的PreCreateWindow中修改窗口風格,如下:

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved