新聞中心
Linux下看門狗測試,監(jiān)控系統(tǒng)穩(wěn)定性

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設與策劃設計,千山網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設十載,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:千山等地區(qū)。千山做網(wǎng)站價格咨詢:18982081108
隨著計算機應用的不斷擴展和發(fā)展,系統(tǒng)的穩(wěn)定性問題越來越受到關注。為了保證系統(tǒng)的穩(wěn)定性和可靠性,各種監(jiān)控手段被廣泛應用于計算機系統(tǒng)中。與此同時,看門狗(Watchdog)也逐漸成為一種重要的監(jiān)控手段。本文將介紹在Linux下進行看門狗測試的方法,并且探討如何通過使用看門狗來監(jiān)控系統(tǒng)的穩(wěn)定性。
一、看門狗的作用
看門狗是一種硬件或軟件工具,旨在監(jiān)控系統(tǒng)的運行狀態(tài)??撮T狗會周期性地向系統(tǒng)發(fā)送信號,以確保系統(tǒng)處于正常運行狀態(tài)。如果系統(tǒng)出現(xiàn)異?;虮罎?,看門狗會自動重啟系統(tǒng),從而達到保證系統(tǒng)穩(wěn)定性的目的。由于看門狗是自動化運行的,所以可以顯著提高系統(tǒng)的穩(wěn)定性和可靠性。
二、Linux下的看門狗
在Linux系統(tǒng)下,看門狗通常是通過硬件實現(xiàn)的。一般來說,看門狗會連接到系統(tǒng)的PCI總線上,然后由BIOS啟動看門狗。在Linux內(nèi)核中,看門狗設備通常被稱為 /dev/watchdog。通過讀取 /dev/watchdog 設備信息,就可以了解系統(tǒng)是否處于正常運行狀態(tài)。如果獲取 /dev/watchdog 設備信息失敗,那么就表明系統(tǒng)出現(xiàn)故障,需要重啟。
三、如何配置看門狗
我們可以使用系統(tǒng)自帶的watchdog工具來配置和監(jiān)控系統(tǒng)的看門狗。watchdog工具的安裝方法依賴于您的Linux發(fā)行版,比較常見的發(fā)行版如Ubuntu、CentOS和Debian等都有watchdog工具包。在完成安裝后,可以運行以下命令來檢查是否已經(jīng)安裝成功:
“`
# watchdog –version
“`
如果輸出版本號,那么就表明watchdog已經(jīng)安裝成功了。
接下來,需要編輯watchdog的配置文件 /etc/watchdog.conf。在配置文件中,可以設置watchdog的各種參數(shù),包括監(jiān)控時間、重啟時間等。通過修改這些參數(shù),可以使watchdog更好地適應不同的系統(tǒng)。另外還需要注意的是,如果watchdog檢測到系統(tǒng)出現(xiàn)故障,它將在一定時間范圍內(nèi)發(fā)送警告信息。如果在這個時間范圍內(nèi)沒有采取任何措施,watchdog會自動重啟系統(tǒng)。因此,在配置watchdog時,必須確保接收警告信息的程序能夠及時響應并采取相應措施。
四、測試看門狗
為了確??撮T狗能夠正確地監(jiān)控系統(tǒng)的穩(wěn)定性,我們需要進行一些測試。在Linux系統(tǒng)下,通常有兩種測試方式:
1. 模擬系統(tǒng)故障。
在這種測試中,我們可以手動模擬系統(tǒng)出現(xiàn)故障,從而觀察看門狗的運行情況。例如,我們可以將系統(tǒng)中的某個重要進程殺死,然后觀察看門狗是否能夠啟動并重啟系統(tǒng)。
2. 禁用網(wǎng)絡連接。
在這種測試中,我們可以禁用系統(tǒng)的網(wǎng)絡連接,從而觀察看門狗是否能夠檢測到這種變化。具體來說,可以使用以下命令關閉網(wǎng)絡連接:
“`
# systemctl stop network-manager
“`
停止網(wǎng)絡連接后,等待一段時間觀察看門狗的運行情況。
五、
在本文中,我們介紹了Linux下看門狗測試的方法,并探討了如何使用看門狗來監(jiān)控系統(tǒng)的穩(wěn)定性。通過使用看門狗,我們可以保證系統(tǒng)的穩(wěn)定性和可靠性。如果您是一名系統(tǒng)管理員或開發(fā)人員,希望可以通過本文的介紹,更好地了解Linux下的看門狗,并加強您的系統(tǒng)監(jiān)控工作。
相關問題拓展閱讀:
- 【求助】linux下的C語言多線程,怎樣監(jiān)視鍵盤上的輸入?
【求助】linux下的C語言多線程,怎樣監(jiān)視鍵盤上的輸入?
發(fā)所用語言為C..
一般的..要想學好嵌入式開發(fā)..就要兩個都會..
如果只學linux,這個只是為以后從事linux服務器搭建,管理和維護等..差不多就是跟硬件打交道..
而嵌入式開發(fā)就相當于..在windows下用C,C++,C#,java等開發(fā)一樣..只不過他的開發(fā)平臺換成了linux…
如果想自學建議按照以下步驟:
學習步驟如下:
1、Linux 基礎
安裝Linux操作系統(tǒng)
Linux文件系統(tǒng)
Linux常用命令
Linux啟動過程詳解
熟悉Linux服務能夠獨立安裝Linux操作系統(tǒng)
能夠熟練使用Linux系統(tǒng)的基本命令
認識Linux系統(tǒng)的常用服務安裝Linux操作系統(tǒng)
Linux基本命令實踐
設置Linux環(huán)境變量
定制Linux的服務 Shell 編程基礎使用vi編輯文件
使用Emacs編輯文件
使用其他編輯器
2、Shell 編程基礎
Shell簡介
認識后臺程序
Bash編程熟悉Linux系統(tǒng)下的編輯環(huán)境
熟悉Linux下的各種Shell
熟練進行shell編程熟悉vi基本操作
熟悉Emacs的基本操作
比較不同shell的區(qū)別
編寫一個測試服務器是否連通的shell腳本程序
編寫一個查看進程是否存在的shell腳本程序
編寫一個帶有循環(huán)語句的shell腳本程序
3、Linux 下的 C 編程基礎
linux C語言環(huán)境概述
Gcc使用方法
Gdb調(diào)試技術
Autoconf
Automake
Makefile
代碼優(yōu)化 熟悉Linux系統(tǒng)下的開發(fā)環(huán)境
熟悉Gcc編譯器
熟悉Makefile規(guī)則編寫Hello,World程序
使用 make命令編譯程序
編寫帶有一個循環(huán)的程序
調(diào)試一個有問題的程序
4、嵌入式系統(tǒng)開發(fā)基礎
嵌入式系統(tǒng)概述
交叉編譯
配置TFTP服務
配置NFS服務
下載Bootloader和內(nèi)核
嵌入式Linux應用軟件開發(fā)流程
熟悉嵌入式系統(tǒng)概念以及開發(fā)流程
建立嵌入式系統(tǒng)開發(fā)環(huán)境制作cross_gcc工具鏈
編譯并下載U-boot
編譯并下載Linux內(nèi)核
編譯并下載Linux應用程序
嵌入式系統(tǒng)移植
Linux內(nèi)核代碼
平臺相關代碼分析
ARM平臺介紹
平臺移植的關鍵技術
移植Linux內(nèi)核到 ARM平臺 了解移植的概念
能夠移植Linux內(nèi)核移植Linux2.6內(nèi)核到 ARM9開發(fā)板
5、嵌入式 Linux 下串口通信
串行I/O的基本概念
嵌入式Linux應用軟件開發(fā)流程
Linux系統(tǒng)的文件和設備
與文件相關的系統(tǒng)調(diào)用
配置超級終端和MiniCOM 能夠熟悉進行串口通信
熟悉文件I/O 編寫串口通信程序
編寫多串口通信程序
6、嵌入式系統(tǒng)中多進程程序設計
Linux系統(tǒng)進程概述
嵌入式系統(tǒng)的進程特點
進程操作
守護進程
相關的系統(tǒng)調(diào)用了解Linux系統(tǒng)中進程的概念
能夠編寫多進程程序編寫多進程程序
編寫一個守護進程程序
sleep系統(tǒng)調(diào)用任務管理、同步與通信 Linux任務概述
任務調(diào)度
管道
信號
共享內(nèi)存
任務管理 API 了解Linux系統(tǒng)任務管理機制
熟悉進程間通信的幾種方式
熟悉嵌入式Linux中的任務間同步與通信
編寫一個簡單的管道程序實現(xiàn)文件傳輸
編寫一個使用共享內(nèi)存的程序
7、嵌入式系統(tǒng)中多線程程序設計
線程的基礎知識
多線程編程方法
線程應用中的同步問題了解線程的概念
能夠編寫簡單的多線程程序編寫一個多線程程序
8、嵌入式 Linux 網(wǎng)絡編程
網(wǎng)絡基礎知識
嵌入式Linux中TCP/IP網(wǎng)絡結構
socket 編程
常用 API函數(shù)
分析Ping命令的實現(xiàn)
基本UDP套接口編程
許可證管理
PPP協(xié)議
GPRS 了解嵌入式Linux網(wǎng)絡體系結構
能夠進行嵌入式Linux環(huán)境下的socket 編程
熟悉UDP協(xié)議、PPP協(xié)議
熟悉GPRS 使用socket 編寫代理服務器
使用socket 編寫路由器
編寫許可證服務器
指出TCP和UDP的優(yōu)缺點
編寫一個web服務器
編寫一個運行在 ARM平臺的網(wǎng)絡播放器
9、GUI 程序開發(fā)
GUI基礎
嵌入式系統(tǒng)GUI類型
編譯QT
進行QT開發(fā)熟悉嵌入式系統(tǒng)常用的GUI
能夠進行QT編程使用QT編寫“Hello,World”程序
調(diào)試一個加入信號/槽的實例
通過重載QWidget 類方法處理事件
10、Linux 字符設備驅動程序
設備驅動程序基礎知識
Linux系統(tǒng)的模塊
字符設備驅動分析
fs_operation結構
加載驅動程序了解設備驅動程序的概念
了解Linux字符設備驅動程序結構
能夠編寫字符設備驅動程序編寫Skull驅動
編寫鍵盤驅動
編寫I/O驅動
分析一個看門狗驅動程序
對比Linux2.6內(nèi)核與2.4內(nèi)核中字符設備驅動的不同
Linux 塊設備驅動程序塊設備驅動程序工作原理
典型的塊設備驅動程序分析
塊設備的讀寫請求隊列了解Linux塊設備驅動程序結構
能夠編寫簡單的塊設備驅動程序比較字符設備與塊設備的異同
編寫MMC卡驅動程序
分析一個文件系統(tǒng)
對比Linux2.6內(nèi)核與2.4內(nèi)核中塊設備驅動的不同
11、文件系統(tǒng)
虛擬文件系統(tǒng)
文件系統(tǒng)的建立
ramfs內(nèi)存文件系統(tǒng)
proc文件系統(tǒng)
devfs 文件系統(tǒng)
MTD技術簡介
MTD塊設備初始化
MTD塊設備的讀寫操作了解Linux系統(tǒng)的文件系統(tǒng)
了解嵌入式Linux的文件系統(tǒng)
了解MTD技術
能夠編寫簡單的文件系統(tǒng)為 ARM9開發(fā)板添加 MTD支持
移植JFFS2文件系統(tǒng)
通過proc文件系統(tǒng)修改操作系統(tǒng)參數(shù)
分析romfs 文件系統(tǒng)源代碼
創(chuàng)建一個cramfs 文件系統(tǒng)
望采納:可是一個字一個字錢敲出來的..
另外,站長團上有產(chǎn)品團購,便宜有保證
在Microsoft Windows 中,鍵盤和鼠標是兩個標準的用戶輸入源,在一些交疊的操作中通常相互補充使用。當然,鼠標在今天的應用程序中比10年前使用得更為廣泛。甚至在一些應用程序中,我們更習慣于使用鼠標,例如在游戲、畫圖程序、音樂程序,以及Web創(chuàng)覽器等程序中就是這樣。然而,我們可以不使用鼠標,但絕對不能從一般的PC中拆掉鍵盤。
Windows程序獲得鍵盤輸入的方式:鍵盤輸入以消息的形式傳遞給程序的窗口過程。實際上,之一次學習消息時,鍵盤就是一個明顯的例子:消息應該傳遞給應用程序的信息類型。
Windows用8種不同的消息來傳遞不同的鍵盤事件。這好像太多了,但是(就像我們所看到的一樣)程序可以忽略其中至少一半的消息而不會有任何問題。并且,在大多數(shù)情況下,這些消息中包含的鍵盤信息會多于程序所需要的。處理鍵盤的部分工作就是識別出哪些消息是重要的,哪些是不重要的。
鍵盤基礎知識
雖然應用程序在很多情況下可以通過鼠標實現(xiàn)信息的輸入,但到現(xiàn)在為止鍵盤仍然是PC機中不可替代的重要輸入設備。
用鍵盤當作輸入設備,每當用戶按下或釋放某一個鍵時,會產(chǎn)生一個中斷,該中斷激活鍵盤驅動程序KEYBOARD.DRV來對鍵盤中斷進行處理。 KEYBOARD.DRV程序會根據(jù)用戶的不同操作進行編碼,然后調(diào)用Windows用戶模塊USER.EXE生成鍵盤消息,并將該消息發(fā)送到消息隊列中等候處理。
1.掃描碼和虛擬碼
掃描碼對應著鍵盤上的不同鍵,每一個鍵被按下或釋放時,都會產(chǎn)生一個唯一的掃描碼作為本身的標識。掃描碼依賴于具體的硬件設備,即當相同的鍵被按下或釋放時,在不同的機器上可能產(chǎn)生不同的掃描碼。在程序中通常使用由Windows系統(tǒng)定義的與具體設備無關的虛擬碼。在擊鍵產(chǎn)生掃描碼的同時,鍵盤驅動程序KEYBOARD.DRV截取鍵的掃描碼,然后將其翻譯成對應的虛擬碼,再將掃描碼和虛擬碼一齊編碼形成鍵盤消息。所以,最后發(fā)送到消息隊列的鍵盤消息中,既包含了掃描碼又包含了虛擬碼。
經(jīng)常使用的虛擬碼在WINDOWS.H文件中定義,常用虛擬碼的數(shù)值、常量符號和含義如表所示。
取值(16進制) 常量符號 含義
VK_LBUTTON 鼠標左鍵
VK_RBUTTON 鼠標右鍵
VK_CANCEL Break中斷鍵
VK_MBUTTON 鼠標中鍵
未定義
VK_BACK (BackSpace)鍵
VK_TAB Tab鍵
0A-0B — 未定義
0C VK_CLEAR Clear鍵
0D VK_RETURN Enter鍵
0E-0F — 未定義
VK_SHIFT Shift鍵
VK_CONTROL Ctrl鍵
VK_MENU Alt鍵
VK_PAUSE Pause鍵
VK_CAPTIAL CapsLock鍵
漢字系統(tǒng)保留
1A — 未定義
1B VK_ESCAPE Esc鍵
1C-1F — 漢字系統(tǒng)保留
VK_SPACE 空格鍵
VK_PRIOR PageUp鍵
VK_NEXT PageDown鍵
VK_END End鍵
VK_HOME Home鍵
VK_LEFT ←(Left Arrow)鍵
VK_UP ↑(Up Arrow)鍵
VK_RIGHT →(Right Arrow)鍵
VK_DOWN ↓(Down Arrow)鍵
VK_SELECT Select鍵
2A — OEM保留
2B VK_EXECUTE Execute鍵
2C VK_SNAPSHOT Print Screen鍵
2D VK_INSERT Insert鍵
2E VK_DELETE Delete鍵
2F VK_HELP Help鍵
VK_0-VK_9 數(shù)字鍵0-9
3A未定義
A VK_A-VK_Z 字母鍵A-Z
5B-5F — 未定義
VK_NUMPAD0-VK_NUMPAD9 小鍵盤數(shù)字鍵0-9
6A VK_MULTIP *(乘號)鍵
6B VK_ADD +(加號)鍵
6C VK_SEPAPATOR 分隔符鍵
6E VK_SURACT -(減號)鍵
6F VK_DECIMAL .(小數(shù)點)鍵
VK_DIVIDE /(除號)鍵
F VK_F1-VK_F24 F1-F24功能鍵
VK_NUMBERLOCK Number lock鍵
VK_SCROLL Scroll lock鍵
B9 — 未定義
BA-C0 — OEM保留
C1-DA — 未定義
DB_E4 — OEM保留
E5 — 未定義
E6 — OEM保留
E7-E8 — 未定義
E9-F5 — OEM保留
F6-FE — 未定義
2.輸入焦點
同一時刻,Windows中可能有多個不同的程序在運行,也就是說有多個窗口同時存在。這時,鍵盤由多個窗口共享,但只有一個窗口能夠接收到鍵盤消息,這個能夠接收鍵盤消息的窗口被稱為擁有輸入焦點的窗口。
擁有輸入焦點的窗口應該是當前的活動窗口,或者是活動窗口的子窗口,其標題和邊框會以高亮度顯示,以區(qū)別于其他窗口。擁有輸入焦點的也可以是圖標而不是窗口,此時,Windows也將消息發(fā)送給圖標,只是消息的格式略有不同。
窗口過程可以通過發(fā)送WM_SETFOCUS和 WM_KILLFOCUS消息使窗體獲得或失去輸入焦點。程序也可以通過捕獲WM_SETFOCUS和WM_KILLFOCUS消息來判斷窗體何時獲得或失去輸入焦點。其中WM_SETFOCUS消息表示窗口正獲得輸入焦點,WM_ KILLFOCUS消息表示窗口正失去輸入焦點。
3.鍵盤消息
鍵盤消息分為系統(tǒng)鍵消息和非系統(tǒng)鍵消息。系統(tǒng)鍵消息是指由Aft鍵和其他鍵組合而產(chǎn)生的按鍵消息。當系統(tǒng)鍵被按下時產(chǎn)生WM_ SYSKEYDOWN消息,當系統(tǒng)鍵被釋放時產(chǎn)生WM_SYSKEYUP消息。 Aft鍵與其他鍵形成的組合鍵通常用于對程序菜單和系統(tǒng)菜單進行選擇,或用于在不同的程序之間進行切換。因此,系統(tǒng)鍵消息應該交由Windows進行處理,用戶所編制的程序一般不處理系統(tǒng)鍵消息,而是將這些消息交由DefWindowProc函數(shù)進行處理。如果用戶想對系統(tǒng)鍵消息進行處理,應該在處理完這些消息后,再將其發(fā)送給DefWindowProc函數(shù),使得Windows系統(tǒng)能夠正常工作。
某些擊鍵消息可以被轉換成字符消息,例如字母鍵、數(shù)字鍵等。而有些鍵只能產(chǎn)生按鍵消息而沒有字符消息,例如 Shift鍵、Insert鍵等。消息循環(huán)中的 TranslateMessage函數(shù)可以實現(xiàn)從擊鍵消息向字符消息的轉化。當GetMessage函數(shù)捕獲一個WM_SYSKEYDOWN消息或 WM_KEYDOWN消息后,TranslateMessage函數(shù)判斷產(chǎn)生該消息的鍵是否能夠被轉換成字符消息,如果能,就將該消息轉換成字符消息,再通過DispatchMessape函數(shù)將轉換后的字符消息發(fā)送到消息隊列中去。字符消息共有以下四種,如表所示。
字符 系統(tǒng)字符 非系統(tǒng)字符
普通字符 WM_SYSCHAR WM_CHAR
死字符 WM_SYSDEADCHAR WM_DEADCHAR
其中死字符是由某些特殊鍵盤上的按鍵所造成的,Windows一般忽略死字符所產(chǎn)生的消息。
Windows的消息一般是通過一個MSG結構體變量傳送給消息處理函數(shù)的。對于鍵盤消息, MSG結構體變量的各個域中較重要的是lParam域和 wParam域。wParam域用于保存按鍵的虛擬鍵代碼或字符的ASCII碼。對于非字符消息,wParam域保存按鍵的虛擬健代碼;對于字符消息, wParam域不保存字符的ASCII碼。lParam域則用于保存擊鍵時產(chǎn)生的附加信息,實際上一個32位的lParam變量被分為六部分,記錄了以下相關信息:重復次數(shù)、OEM掃描碼、擴展鍵標志、關聯(lián)鍵標志、前一擊鍵狀態(tài)和轉換狀態(tài)。lParam域各位的含義如表所示。
位數(shù) 含義
擊鍵重復次數(shù)累加
OEM掃描碼
是否為擴展鍵
未定義
是否便用關聯(lián)鍵,及Alt鍵是否同時按下。
前一次擊鍵狀態(tài),0表示該鍵前一次狀態(tài)為抬起,1表示前一次狀態(tài)為按下
轉換狀態(tài)
按鍵的次序不同,產(chǎn)生的消息也不相同。例如,按下并釋放1鍵,讀過程依次產(chǎn)生如表所示三條消息。按下1鍵所產(chǎn)生的消息和wParam的取值
消息 wParam變量取值
WM_KEYDOWN 虛擬碼1
WM_CHAR ASCII碼“1”
WM_KEYUP 虛擬碼1
如果按下Shift鍵后再按下1鍵并釋放,則依次產(chǎn)生如表所示的消息。按下 Shift鍵后按 1健所產(chǎn)生的消息和 wParam的取值
消息 wParam變量取值
WM_KEYDOWN 虛擬碼 VK_SHIFT
WM_KEYDOWN 虛擬碼 VK_1
WM_CHAR ASCII碼 “1”
WM_KEYUP 虛擬碼 VK_1
WM_KEYUP 虛擬碼 VK_SHIF
鍵盤應用實例
下面通過一個應用程序實例來說明在實際編程中如何處理鍵盤消息。
#include
#include
// 全局變量
RECT rc; //記錄滾屏的矩形區(qū)域
?
int xChar, yChar; //文本輸入點坐標
WNDCLASSEX wnd; //窗口類結構變量
char szAppName = “鍵盤消息監(jiān)視程序”; //窗口類名
//函數(shù)聲明
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE hInstance,int iCmdShow);
//函數(shù):WinMain
//作用:入口函數(shù)
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)
{
MSG msg;
if(!MyRegisterClass(hInstance))
{
return FALSE;
}
if(!InitInstance(hInstance,iCmdShow))
{
return FALSE;
}
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}
//函數(shù):ShowKey
//作用:實現(xiàn)在窗口中顯示按鍵信息
void ShowKey (HWND hwnd, int iType,char *szMessage,WPARAM wParam,LPARAM lParam)
{
static char *szFormat ={“%-14s %3d %c %6u %4d %5s %5s %6s %6s”,
”%-14s %3d %c %6u %4d %5s %5s %6s %6s” };
char szBuffer;
HDC hdc;
ScrollWindowEx(hwnd, 0, -yChar, &rc,&rc,NULL,NULL,SW_INVALIDATE);
hdc = GetDC (hwnd);
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT));
TextOut (hdc,
xChar,
rc.bottom – yChar,
szBuffer,
wsprintf szBuffer,
szFormat,
szMessage, //消息
wParam, //虛擬鍵代碼
(BYTE) (iType ? wParam :‘ ’),//顯示字符值
LOWORD (lParam), // 重復次數(shù)
HIWORD (lParam) & 0xFF, // OEM鍵盤掃描碼
//判斷是否為增強鍵盤的擴展鍵
(PSTR) (0x& lParam ? “是” : “否”),
//判斷是否同時使用了ALT鍵
(PSTR) (0x& lParam ? “是” : “否”),
(PSTR) (0x& lParam ? “按下” : “抬”),
//判斷前一次擊鍵狀
(PSTR)(0x& lParam ? “按下” : “抬起”))
//判斷轉換狀態(tài)?
);
ReleaseDC (hwnd, hdc); ?
ValidateRect (hwnd, NULL); ?
}
//函數(shù):WndProc
//作用:處理主窗口的消息
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
static char szTop =”消息鍵 字符 重復數(shù) 掃描碼 擴展碼 ALT 前一狀態(tài) 轉換狀態(tài)”;
static char szUnd =”_______ __ ____ _____ ______ ______ ___ _______ ______”;
//在窗口中輸出文字作為信息標題
HDC hdc;
PAINTSTRUCT ps;
TEXTMETRIC tm;
switch (iMsg)
{
case
hdc = GetDC (hwnd); //設定字體
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); //檢取當前字體的度量數(shù)據(jù)
GetTextMetrics (hdc, &tm);
xChar = tm.tmAveCharWidth;//保存字體平均寬度
yChar = tm.tmHeight; //保存字體高度
ReleaseDC (hwnd, hdc);
rc.top = 3 * yChar / 2;
return 0;
case
//窗體改變后保存新的滾屏區(qū)域右下角坐標
rc.right = LOWORD (lParam);
rc.bottom = HIWORD (lParam);
UpdateWindow (hwnd);
return 0;
case WM_PAINT: //處理窗口重繪消息
InvalidateRect (hwnd, NULL, TRUE);
hdc = BeginPaint (hwnd, &ps);
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
SetBkMode (hdc, TRANSPARENT) ;
TextOut (hdc, xChar, yChar / 2, szTop, (sizeof szTop) – 1) ;
TextOut (hdc, xChar, yChar / 2, szUnd, (sizeof szUnd) – 1) ;
EndPaint (hwnd, &ps);
return 0;
case WM_KEYDOWN:
//處理鍵盤上某一鍵按下的消息
ShowKey (hwnd, 0, “WM_KEYDOWN”,wParam, lParam);
return 0;
case WM_KEYUP:
//處理鍵盤上某一按下鍵被釋放的消息
ShowKey (hwnd, 0, “WM_KEYUP”, wParam, lParam);
return 0;
case WM_CHAR:
//處理擊鍵過程中產(chǎn)生的非系統(tǒng)鍵的可見字符消息
howKey (hwnd, 1, “WM_CHAR”, wParam, lParam);
return 0;
case WM_DEADCHAR:
//處理擊鍵過程中產(chǎn)生的非系統(tǒng)鍵”死字符”消息
ShowKey (hwnd, 1, “WM_DEADCHAR”, wParam, lParam);
return 0;
case WM_SYSKEYDOWN:
//處理系統(tǒng)鍵按下的消息
ShowKey (hwnd, 0, “WM_SYSKEYDOWN”,wParam, lParam);
break;
case WM_SYSKEYUP:
//處理系統(tǒng)鍵抬起的消息
ShowKey (hwnd, 0, “WM_SYSKEYUP”, wParam, lParam);
break;
case
ShowKey (hwnd, 1, “WM_SYSCHAR”, wParam, lParam);
break;
case
ShowKey (hwnd, 1, “WM_SYSDEADCHAR”, wParam, lParam);
break;
case WM_DESTROY:
//處理結束應用程序的消息
PostQuitMessage (0);
return 0;
}
return DefWindowProc (hwnd, iMsg, wParam, lParam);
}
//函數(shù):MyRegisterClass
//作用:注冊窗口類
BOOL MyRegisterClass(HINSTANCE hInstance)
{
wnd.cbSize= sizeof (wnd);
wnd.style = CS_HREDRAW | CS_VREDRAW;
wnd.lpfnWndProc = WndProc;
wnd.cbClsExtra = 0;
wnd.cbWndExtra = 0;
wnd.hInstance = hInstance;
wnd.hIcon = LoadIcon (NULL, IDI_APPLICATION);?
wnd.hCursor = LoadCursor (NULL, IDC_ARROW);
wnd.hbrBackground = (HBRUSH)
GetStockObject (WHITE_BRUSH);
wnd.lpszMenuName = NULL;
wnd.lpszClassName = szAppName;
wnd.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
return RegisterClassEx (&wnd);
}
//函數(shù):InitInstance
//作用:創(chuàng)建主窗口
BOOL InitInstance(HINSTANCE hInstance,int iCmdShow)
{
HWND hwnd;
hwnd = CreateWindow (szAppName,
“鍵盤消息監(jiān)視程序”,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL
);
if(!hwnd)
{
return FALSE;
}
ShowWindow (hwnd, iCmdShow);
UpdateWindow (hwnd);
return TRUE;
關于linux 看門狗測試的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。
成都網(wǎng)站推廣找創(chuàng)新互聯(lián),老牌網(wǎng)站營銷公司
成都網(wǎng)站建設公司創(chuàng)新互聯(lián)(www.cdcxhl.com)專注高端網(wǎng)站建設,網(wǎng)頁設計制作,網(wǎng)站維護,網(wǎng)絡營銷,SEO優(yōu)化推廣,快速提升企業(yè)網(wǎng)站排名等一站式服務。IDC基礎服務:云服務器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗、服務器租用、服務器托管提供四川、成都、綿陽、雅安、重慶、貴州、昆明、鄭州、湖北十堰機房互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務。
標題名稱:Linux下看門狗測試,監(jiān)控系統(tǒng)穩(wěn)定性。 (linux 看門狗測試)
分享路徑:http://m.fisionsoft.com.cn/article/cdcchgo.html


咨詢
建站咨詢
