14

2 つの SYSTEMTIME 変数の差を取得したい。以前に誰かがここでこの質問をしたのを見ましたが、彼は両方の SYSTEMTIME 構造を FILETIME に変換するように言われました.違いを得る別の方法はありますか?

SYSTEMTIME st;
GetSystemTime(&st);

---ここにいくつかのコード---

  SYSTEMTIME st2;
  GetSystemTime(&st2);

st-st2?

4

3 に答える 3

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;
}
于 2013-10-14T21:22:19.680 に答える
7

それはMSDNのドキュメントでかなり明確に述べています

SYSTEMTIME 構造体の値を加算および減算して相対時間を取得することはお勧めしません。代わりに、

  • SYSTEMTIME 構造体を FILETIME 構造体に変換します。
  • 結果の FILETIME 構造を ULARGE_INTEGER 構造にコピーします。
  • ULARGE_INTEGER 値に対して通常の 64 ビット演算を使用します。

まさにそれをしないのはなぜですか?

于 2012-01-02T09:13:46.197 に答える
6

ft1とft2はファイルタイム構造です

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
于 2012-01-02T10:25:49.133 に答える