kak*_*ush 13 c++ windows systemtime
我想区分两个SYSTEMTIME变量.我之前看到有人问过这个问题,但他被告知要将两个SYSTEMTIME结构转换为FILETIME ..还有另一种方法可以解决这个问题吗?
SYSTEMTIME st;
GetSystemTime(&st);
Run Code Online (Sandbox Code Playgroud)
---这里的一些代码---
SYSTEMTIME st2;
GetSystemTime(&st2);
Run Code Online (Sandbox Code Playgroud)
ST-ST2?
小智 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;
}
Run Code Online (Sandbox Code Playgroud)
建议您不要在SYSTEMTIME结构中添加和减去值以获取相对时间.相反,你应该
- 将SYSTEMTIME结构转换为FILETIME结构.
- 将生成的FILETIME结构复制到ULARGE_INTEGER结构.
- 对ULARGE_INTEGER值使用普通的64位算术运算.
为什么不这样做呢?
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;
Run Code Online (Sandbox Code Playgroud)
毫秒差异......
ULARGE_INTEGER uliRetValue;
uliRetValue.QuadPart = 0;
uliRetValue = ul2;
uliRetValue.QuadPart /= 10;
uliRetValue.QuadPart /= 1000; // To Milliseconds
Run Code Online (Sandbox Code Playgroud)