2015-05-12 67 views

回答

0

您可以將time_point轉換爲time_t,然後使用以下函數將其轉換爲FILETIME。

std::time_t t; 
t = to_time_t(std::chrono::high_resolution_clock::now()); 

然後轉換爲FILETIME(https://msdn.microsoft.com/en-us/library/windows/desktop/ms724228%28v=vs.85%29.aspx

#include <windows.h> 
#include <time.h> 

void TimetToFileTime(time_t t, LPFILETIME pft) 
{ 
    LONGLONG ll = Int32x32To64(t, 10000000) + 116444736000000000; 
    pft->dwLowDateTime = (DWORD) ll; 
    pft->dwHighDateTime = ll >>32; 
} 

此外,請記住在Windows上high_resolution_clock被實現爲不那麼高清晰度system_clock

+0

謝謝,我找到了一個解決方案基於你和http:// stackoverflow.com/questions/21050994/stdchrono-default-duration-for-time-since-epoch,它也可以用於sy​​stem_clock,它比std :: time_t更精確,因爲std :: time_t表示以秒爲單位的時間。 – Dom

+0

VS 2015將修復high_resolution_clock :) – melak47

0

這似乎是正確的解決方案:

FILETIME fileTime = { 0 }; 
long long timePointTmp = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count() * 10 + 116444736000000000; 
fileTime.dwLowDateTime = (unsigned long)timePointTmp; 
fileTime.dwHighDateTime = timePointTmp >> 32; 
相關問題