C/C++での正確なタイミング

1577 ワード

プログラムのカウントダウンはプログラマーにとって本当に重要で、windowsの上のあのclock()は本当に正確ではありませんて、精度は10 msだけあって、本当に悲しいです.Windowsの下でC、C++を使って時間を計る関数を研究して、みんなに分かち合います.
主に2つの関数の使用です.まず実行可能なコードを貼り付けて、この2つの関数について話します.
#include <windows.h>  
#include <stdio.h>  
int main(int argc, char **argv)  
{  
    LARGE_INTEGER freq;  
    LARGE_INTEGER start_t, stop_t;  
    double exe_time;  
    QueryPerformanceFrequency(&freq);  
    fprintf(stdout, "The frequency of your pc is %d.
", freq.QuadPart); QueryPerformanceCounter(&start_t); Sleep(1000); QueryPerformanceCounter(&stop_t); exe_time = 1e3*(stop_t.QuadPart-start_t.QuadPart)/freq.QuadPart; fprintf(stdout, "Your program executed time is %fms.
", exe_time); getchar(); return 0; }

1、LARGE_INTEGERはマイクロソフトのコンパイラの中で実際にはunionであり、その定義は以下の通りである.
typedef union _LARGE_INTEGER  
{    
    struct   
    {      
        DWORD LowPart;     
        LONG HighPart;    
    };   
    struct   
    {     
        DWORD LowPart;      
        LONG HighPart;    
    } u;    
    LONGLONG QuadPart;  
} LARGE_INTEGER,  *PLARGE_INTEGER;

使用するコンパイラが64ビット整数をサポートしている場合は、QuadPartを使用して変数の値を参照できます.コンパイラが64ビット整数をサポートしていない場合は、LowPartとHighPartを使用して64ビット整数の低32ビットと高32ビットを参照できます.
2、QueryPerformanceFrequncy(LARGE_INTEGER *freq)
それはあなたの機械が1秒に何回実行するかを得るために使用されます.それはあなたの時計周期です.
3、QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)
CPUが起動してから実行するクロックサイクル数を取得します.
C/C++からの正確なタイミング