2012-01-02 11 views
12

मैं दो SYSTEMTIME चर के बीच अंतर प्राप्त करना चाहता हूं। मैंने देखा कि किसी ने पहले इस सवाल से पहले पूछा था, लेकिन उसे सिस्टमटाइम संरचनाओं को FILETIME में परिवर्तित करने के लिए कहा गया था .. क्या अंतर पाने का कोई और तरीका है?दो SYSTEMTIME चर के बीच अंतर

SYSTEMTIME st; 
GetSystemTime(&st); 

--- यहाँ कुछ कोड ---

SYSTEMTIME st2; 
    GetSystemTime(&st2); 

सेंट-ST2?

+2

आप सब लोग क्या सिफारिश की गई है क्यों नहीं कर सकते और 'FILETIME को' SYSTEMTIME' कन्वर्ट '? –

उत्तर

7

It says pretty clearly on the MSDN documentation:

यह अनुशंसित नहीं है कि आप SYSTEMTIME संरचना से जोड़ सकते हैं और मूल्यों घटाना रिश्तेदार बार प्राप्त करने के लिए। इसके बजाय, आपको

  • SYSTEMTIME संरचना को FILETIME संरचना में कनवर्ट करना चाहिए।
  • परिणामस्वरूप FILETIME संरचना को ULARGE_INTEGER संरचना में कॉपी करें।
  • ULARGE_INTEGER मान पर सामान्य 64-बिट अंकगणित का उपयोग करें।

बिल्कुल ऐसा क्यों नहीं करते?

+1

मैं इससे बचना चाहता था। लेकिन, मैंने जो भी सुझाव दिया है वह करूँगा। मैं अपनी बनाई गई दो ULARGE_INTEGER संरचना को कैसे घटा सकता हूं? – kakush

+0

आप इसके लिए 64-बिट int प्रकार का उपयोग कर सकते हैं। जैसा कि एमएसडीएन (http://msdn.microsoft.com/en-us/library/aa383742(v=VS.85).aspx) पर भी बताया गया है: आपका सी कंपाइलर मूल रूप से 64-बिट पूर्णांक का समर्थन कर सकता है। उदाहरण के लिए, माइक्रोसॉफ्ट विजुअल सी ++ __int64 आकार के पूर्णांक प्रकार का समर्थन करता है। अधिक जानकारी के लिए, अपने सी संकलक के साथ शामिल दस्तावेज देखें। – bobbymcr

5

FT1 और ft2 filetime संरचनाओं

ULARGE_INTEGER ul1; 
    ul1.LowPart = ft1.dwLowDateTime; 
    ul1.HighPart = ft1.dwHighDateTime; 

ULARGE_INTEGER ul2; 
    ul2.LowPart = ft2.dwLowDateTime; 
    ul2.HighPart = ft2.dwHighDateTime; 


ul2.QuadPart -= ul1.QuadPart; 

मिलीसेकंड में अंतर हैं ...

ULARGE_INTEGER uliRetValue; 
    uliRetValue.QuadPart = 0; 


    uliRetValue = ul2; 
    uliRetValue.QuadPart /= 10; 
    uliRetValue.QuadPart /= 1000; // To Milliseconds 
19
SYSTEMTIME operator-(const SYSTEMTIME& pSr,const SYSTEMTIME& pSl) 
{ 
    SYSTEMTIME t_res; 
    FILETIME v_ftime; 
    ULARGE_INTEGER v_ui; 
    __int64 v_right,v_left,v_res; 
    SystemTimeToFileTime(&pSr,&v_ftime); 
    v_ui.LowPart=v_ftime.dwLowDateTime; 
    v_ui.HighPart=v_ftime.dwHighDateTime; 
    v_right=v_ui.QuadPart; 

    SystemTimeToFileTime(&pSl,&v_ftime); 
    v_ui.LowPart=v_ftime.dwLowDateTime; 
    v_ui.HighPart=v_ftime.dwHighDateTime; 
    v_left=v_ui.QuadPart; 

    v_res=v_right-v_left; 

    v_ui.QuadPart=v_res; 
    v_ftime.dwLowDateTime=v_ui.LowPart; 
    v_ftime.dwHighDateTime=v_ui.HighPart; 
    FileTimeToSystemTime(&v_ftime,&t_res); 
    return t_res; 
} 
+0

यदि कुछ सेकंड पहले सही है तो बाएं ... तो ऐसा लगता है कि आपको अपने उत्तर के रूप में वास्तव में बड़ा समय मिलता है? सिस्टम वर्ड सदस्यों (हस्ताक्षरित) से बना है, इसलिए यह नकारात्मक समय अंतर का प्रतिनिधित्व नहीं कर सकता है। –

संबंधित मुद्दे