Windows與Linux系統實現延遲的比較+Windows下實現微秒延遲
阿新 • • 發佈:2019-02-01
在VC中Sleep中的第一個英文字元為大寫的"S"
在標準C中是sleep, 不要大寫。下面使用大寫的來說明(具體用什麼看你用什麼編譯器. 簡單的說VC用Sleep, 別的一律使用sleep)
Sleep函式的一般形式:
Sleep(unsigned long);
在標準C中是sleep, 不要大寫。下面使用大寫的來說明(具體用什麼看你用什麼編譯器. 簡單的說VC用Sleep, 別的一律使用sleep)
Sleep函式的一般形式:
Sleep(unsigned long);
其中,Sleep()裡面的單位,是以毫秒為單位,所以如果想讓函式滯留1秒的話,應該是
#inlcude <windows.h>
Sleep(1000);
在Linux下,sleep中的“s”不大寫
sleep()單位為秒,usleep()裡面的單位是微秒。
在核心中,sleep的實現是由pause函式和alarm函式兩個實現的。
特別注意在Codeblocks環境下是無法使用sleep函式的,因為在windows上Codeblocks採用mingw(Gnu在Window環境下的編譯器,
可以充分使用WindowsApi)作為編譯器,而在stdlib.h中sleep的說明如下:_CRTIMP void __cdecl __MINGW_NOTHROW _sleep (unsigned long) __MINGW_ATTRIB_DEPRECATED;可以認為mingw捨棄了sleep函式,建議用Sleep實現sleep。
#include <unistd.h>
sleep(1);
Windows下實現微秒延遲(並不完全精確)
void delay_us(void) { LARGE_INTEGER litmp; LONGLONG QPart1, QPart2; double dfMinus, dfFreq, dfTim; QueryPerformanceFrequency(&litmp); dfFreq = (double)litmp.QuadPart;// 獲得計數器的時鐘頻率 QueryPerformanceCounter(&litmp); QPart1 = litmp.QuadPart;// 獲得初始值 do { QueryPerformanceCounter(&litmp); QPart2 = litmp.QuadPart;//獲得中止值 dfMinus = (double)(QPart2-QPart1); dfTim = dfMinus / dfFreq;// 獲得對應的時間值,單位為秒 }while(dfTim<0.000001); } int main() { printf("The start clock is: %ld\n", clock()); delay_us(); printf("The end clock is: %ld\n", clock()); system("pause"); return 0; }