缓存结果怎么样?这不是一种可能吗?考虑到这个特定的 sprintf() 调用在您的代码中过于频繁,我假设在大多数这些连续调用之间,年、月和日不会改变。
因此,我们可以实现如下所示。声明一个旧的和当前的 SYSTEMTIME 结构:
SYSTEMTIME sysTime, oldSysTime;
另外,声明单独的部分来保存日期和时间:
char datePart[80];
char timePart[80];
因为,第一次,您必须同时填写 sysTime、oldSysTime 以及 datePart 和 timePart。但是随后的 sprintf() 可以变得更快,如下所示:
sprintf (timePart, "%02d:%02d:%02d", sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
if (oldSysTime.wYear == sysTime.wYear &&
oldSysTime.wMonth == sysTime.wMonth &&
oldSysTime.wDay == sysTime.wDay)
{
// 我们可以重用日期部分
strcpy (buff, datePart);
strcat (buff, timePart);
}
别的 {
// 我们还需要重新生成日期部分
sprintf (datePart, "%4d-%02d-%02d", sysTime.wYear, sysTime.wMonth, sysTime.wDay);
strcpy (buff, datePart);
strcat (buff, timePart);
}
memcpy (&oldSysTime, &sysTime, sizeof (SYSTEMTIME));
上面的代码有一些冗余,使代码更容易理解。您可以轻松排除。如果您知道小时和分钟的变化不会比您对例行程序的调用更快,您可以进一步加快速度。