C++ 時間操作(獲取毫秒級)


//使用標准C語言的time函數,可以滿足一般性需要

#include <time.h>

#include <stdio.h>

int main( void )

{

time_t t = time( 0 );

char tmp[64];

strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",

localtime(&t) );

puts( tmp );

return 0;

}

 

//GetLocalTime獲取當前系統時間,精確到微妙級

#include <windows.h>

#include <stdio.h>

int main( void )

{

SYSTEMTIME sys;

GetLocalTime( &sys );

printf( "%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n"

,sys.wYear,sys.wMonth,sys.wDay

,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds

,sys.wDayOfWeek);

 

return 0;
}

 

//利用win32 API  QueryPerformanceFrequency與QueryPerformanceCounter,可以更精確精確的計算,例如拿來測試,網絡抓包的精確分析

#include <windows.h>

#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
    LARGE_INTEGER lv,lv_b;

    // 獲取每秒多少CPU Performance Tick
    QueryPerformanceFrequency( &lv );

    // 轉換為每個Tick多少秒
    double secondsPerTick = 1.0 / lv.QuadPart;
    QueryPerformanceCounter( &lv_b );
    for ( size_t i = 0; i < 100; ++i ) {
        // 獲取CPU運行到現在的Tick數
        QueryPerformanceCounter( &lv );
        cout.precision( 6 );
        // 計算CPU運行到現在的時間
        // 比GetTickCount和timeGetTime更加精確
        LONGLONG duration = lv.QuadPart-lv_b.QuadPart;
        double timeElapsedTotal = secondsPerTick * duration;
        cout << fixed << showpoint << timeElapsedTotal << endl;
        //printf( "%lf \n", timeElapsedTotal ) ;
    }
    return 0;
}
//如果上面還不能滿足你的需求,請看下面

http://www.boost.org/doc/libs/1_53_0/doc/html/date_time.html

可以提供納秒級的精確計算,而且跨平台

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM