Windows下用MFC實現微秒級延時

2021-09-25 09:39:45 字數 1146 閱讀 5515

一幫情況可以使用sleep()函式來實現延時,但windows不是實時的,是作業系統來分配處理器給多個執行緒的,而不會執行緒一直擁有處理器的使用權。比如延時50ms,不論採用什麼方式來延時,50ms以後,作業系統未必就正好把處理器分配給這個執行緒使用。

使用乙個sleep(50),這下這個執行緒就暫停了,50ms以內作業系統就不會把處理器給這個執行緒用,50ms以後這個執行緒要求處理器,作業系統才會可能給他分配,但是僅僅是可能,也有可能這時候有乙個優先順序更高的執行緒也要用處理器,作業系統就不一定給他。可能等到這個更高優先順序的執行緒用完了,這時候已經過了55ms了,就不是精確的了。

在windows平台下,常用的計時器還有另外兩種,一種是timegettime多**計時器,它可以提供毫秒級的計時。但這個精度對很多應用場合而言還是太粗糙了。另一種是queryperformancecount計數器,隨系統的不同可以提供微秒級的計數。對於實時圖形處理、多**資料流處理、或者實時系統構造的程式設計師,善用queryperformancecount/queryperformancefrequency是一項基本功。

可以使用 queryperformancecount/queryperformancefrequency實現微秒級的延時,例子如下:

void delayus(double udelay)

while(dftim< udelay); //延時時間小於預定值,繼續進行延時

}

對延時函式進行測試:

#include #include void delayus(double udelay)

while(dftim< udelay);

}void main()

程式執行結果:

機器的cpu頻率為3117382hz

延時前cpu執行次數為:985262162

延時後cpu執行次數為:985324514

延時函式總共耗費cpu執行次數為:62352

實際延時時間為:62352/3117382 ≈0.02000139860947423190356523518773

延時誤差在0.2微秒以內,基本能達到微秒級的延時要求。

windows環境下MFC呼叫libtorch

1.新建mfc應用程式,設定為release x64執行模式,並設定為realease可斷點除錯模式 自行網上查詢 其中sdl檢查設定為否 2.新增mfc程式所需環境變數 vc 包含目錄 e software opencv 2.4.13.5 opencv build include e softwa...

用MFC實現串列埠程式設計

在windows應用程式的開發中,我們常常需要面臨與外圍資料來源裝置通訊的問題。計算機和微控制器 如mcs 51 都具有序列通訊口,可以設計相應的串列埠通訊程式,完成二者之間的資料通訊任務。實際工作中利用串列埠完成通訊任務的時候非常之多。已有一些文章介紹串列埠程式設計的文章在計算機雜誌上發表。但總的...

用MFC實現串列埠程式設計

在windows應用程式的開發中,我們常常需要面臨與外圍資料來源裝置通訊的問題。計算機和微控制器 如mcs 51 都具有序列通訊口,可以設計相應的串列埠通訊程式,完成二者之間的資料通訊任務。實際工作中利用串列埠完成通訊任務的時候非常之多。已有一些文章介紹串列埠程式設計的文章在計算機雜誌上發表。但總的...