1. 程式人生 > >Windows與Linux系統實現延遲的比較+Windows下實現微秒延遲

Windows與Linux系統實現延遲的比較+Windows下實現微秒延遲

在VC中Sleep中的第一個英文字元為大寫的"S"
在標準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;  
}