W indows作業系統下的軟體定時器的設計與應用

2021-04-13 02:21:55 字數 1935 閱讀 6513

1)windows作業系統的定時器。

該定時器利用wm—timer訊息對映來進行簡單的時間控制。wm—timer訊息由作業系統18.2hz的系統中斷產生。其定時精度可達到55ms左右。此定時器的使用非常簡單,只需要在settimer()中設定時間間隔,並在ontimer()中新增訊息響應處理語句,用來完成定時時間的操作。由於windows作業系統工作方式為多執行緒的搶先式多工,並且wm—timer訊息的優先順序較低,因此,這種定時方法使用於螢幕的定時重新整理和點陣圖動態顯示等要求定時精度不高的情況。

2)多**定時器。

該定時器擁有自己單獨的執行緒,呼叫**函式。它不依賴於訊息機制,而是建立在中斷的基礎上。在20ms以上的定時任務中,精度可達1ms。定時間隔在7~20ms之間,誤差在1~3ms。對於小於7ms的定時,則不易實現。

3)為了提高定時精度,還可以採用軟硬體結合的形式。

這種定時器利用外部硬體時鐘電路來獲取精確的定時時間觸發訊號,將外部的定時觸發作為乙個硬體中斷,定時精度可以達到幾個微秒。

由於windows作業系統遮蔽了對硬體的操作,系統應用程式只能工作於cpu的ring 3級,沒有對硬體埠的操作許可權。因此,需要編寫虛擬裝置驅動程式(vxd),增加了很大的工作量和不穩定因素。

在較新的計算機硬體系統中,包含有高精度效能的計數器,其計數頻率與cpu的時鐘頻率有關。利用它可以較準確地估計一段程式**的執行時間。win 32 api提供的queryperformancefrequency()函式可以取得高精度計數器的頻率,queryperformancecounter()函式可以用來取得計數器的當前記數值。其函式的原型如下:

bool queryperformancefrequency f large—integer1 pfrequency);

bool queryperformancecounter f la rge —integer1pcount);

其中,資料型別large—interger既可以是乙個8位元組長的整型數,也可以是兩個4位元組長的整型數的聯合結構,其具體用法根據編譯器是否支援64位而定。該型別的定義如下:

typedef union—large—integer

longlong quadpart;/8位元組整型數

}la.rge—integer;

進行時間計算時,先呼叫queryperformance.frequency()函式,獲得計算機內部定時器的時鐘頻率i廠c接著,在需要嚴格定時的時間發生之前和發生之後,分別呼叫queryperformancecounter()函式。利用兩次獲得的計數之差和時鐘頻率,就可以計算出事件經歷的準確時間。對以上演算法稍加改造,就可以得到微秒級的精確定時器。為了定時,就要得到一段精確的時間段。其具體方法為:

1)獲得定時器的時鐘頻率.廠;

2)計算一段時間t所需要的記數值count=i廠×t;

3)讀取計時開始時的高精度計數器的初始值countl;

4)反覆讀取高精度計數器的數值count 2,直到count 2一count 1/count為止。傳送定時時間到達的訊息。

5) 將count 2的記數值賦給count 1,轉入4)。

這樣,就可以得到乙個定時時間長度近似為t的微秒級定時器。但是實際使用過程中,定時器會存在一些誤差,誤差的大小和高精度計數器的頻率有關。計數器的頻率越高,誤差也就越小。另外,由於windows作業系統為基於搶占式多工的工作方式,因此,此定時器的定時精度也受到一定的影響。

利用windows作業系統的多執行緒機制,可以實現定時和實時顯示的功能。將主線程用於與使用者的互動,如引數的設定、反饋資訊的顯示等。工作執行緒用於啟動定時器,傳送控制訊號,並將控制資訊傳給主線程。工作執行緒的流程圖如圖1所示:

windows作業系統下nginx的開啟和關閉

直接雙擊nginx.exe,你可以看到黑視窗一閃而過,那nginx就啟動成功了 如果你不放心是否啟動成功,那你可以開啟任務管理器檢視 nginx程序,任務管理器裡面有兩個nginx.exe是正常的,這是nginx的多路復用 另外注意你雙擊一次nginx安裝目錄下面的nginx.exe,就會開啟兩個n...

windows作業系統

1.檢視埠 netstat ano netstat ano find 2檢視程序 tasklist 3.刪除程序 tskill 4.開啟程序管理器 taskmgr 5.ping 6.ipconfig all 7.f 8 cd cd.9.mkdir rmdir linux rm rf 10.dir 列...

在Windows作業系統下,解除安裝Oracle 9i

在windows作業系統下,解除安裝oracle 9i 1 停止所有oracle服務 2 刪除登錄檔中的所有關於oracle項 1 在hkey local machine software下,刪除oracle目錄 2 在hkey local machine system controlset001 ...