2010-12-15 95 views
1

我想以毫秒爲單位測量開始我的應用程序和另一次(例如16:00點)之間的時間。做這個的最好方式是什麼?測量時間差

我環顧了「時鐘」功能,但它不是我所需要的。

操作系統:Windows NT的以上

+1

操作系統? – John 2010-12-15 00:04:17

+0

win nt及以上 – Tom 2010-12-15 00:05:31

回答

8

查找gettimeofday對POSIX系統和timeGetTime爲Windows。

編輯:似乎OP是要求代碼比較當前時間/日期與另一個時間/日期。下面的代碼演示如何獲取當前日期和時間在Windows上:

#include <Windows.h> 
#include <stdio.h> 

void main() 
{ 
    SYSTEMTIME st; 
    GetSystemTime(&st); 
    printf("Year:%d\nMonth:%d\nDate:%d\nHour:%d\nMin:%d\nSecond:%d\n" 
     ,st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond); 
} 

這裏是如何計算兩個SYSTEMTIME對象之間的差異:

#include <windows.h> 
#include <iostream> 

// Return time difference in units of 100 us. 
_int64 Delta(const SYSTEMTIME st1, const SYSTEMTIME st2) { 
    union timeunion { 
     FILETIME fileTime; 
     ULARGE_INTEGER ul; 
    } ; 

    timeunion ft1; 
    timeunion ft2; 

    SystemTimeToFileTime(&st1, &ft1.fileTime); 
    SystemTimeToFileTime(&st2, &ft2.fileTime); 

    return ft2.ul.QuadPart - ft1.ul.QuadPart; 
} 

int main() { 
    SYSTEMTIME t1 = {0}, t2 = {0}; 
    t1.wDay = 10; 
    t1.wMonth = 4; 
    t1.wYear = 2009; 

    t2.wDay = 12; 
    t2.wMonth = 4; 
    t2.wYear = 2009; 

    _int64 i = Delta(t1, t2); 
    std::cout << "times are " << i/10000000 << " seconds apart\n"; 

    return 0; 
} 

這兩個樣品應該給你工具來做你需要的。

+0

謝謝胡里奧,正是我正在尋找! – Tom 2010-12-15 02:19:29

+0

@Julio恕我直言。這是解決我從許多解決方案中看到的這個問題的最乾淨和最簡單的實現。 – TinyRacoon 2016-07-22 10:56:51

4

如果你是一個POSIX系統上,你可以使用gettimeofday(3)

struct timeval start, end; 
gettimeofday(&start, NULL); 
... 
gettimeofday(&end, NULL); 

// Watch out for overflow! 
int delta_milliseconds = 1000 * (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec)/1000; 

如果您使用的是Windows,你可以使用GetTickCount

DWORD start, end; 
start = GetTickCount(); 
... 
end = GetTickCount(); 
int delta_milliseconds = end - start; 

但卻認識到,只有GetTickCount具有約10-16毫秒的分辨率。如果您需要更精確,使用QueryPerformanceCounterQueryPerformanceFrequency代替:

// Error-checking omitted for expository purposes 
LARGE_INTEGER freq, start, end; 
QueryPerformanceFrequency(&freq); 
QueryPerformanceCounter(&start); 
... 
QueryPerformanceCounter(&end); 
double delta_milliseconds = (double)(end.QuadPart - start.QuadPart)/freq.QuadPart * 1000.0; 
+0

嘿,感謝亞當,但這是計算通話間隔的時間。我需要的是計算當前系統時間,比如12:30,並測量12:30和預定義時間(比如16:00)之間的毫秒數 – Tom 2010-12-15 00:11:27