首先它过时了。
其次,它会污染内存。
事发于某个业务执行时需要写日志,但调用完日志后(日志中有调用ftime),调用处附近的变量值莫名地被修改了。
用gdb的watch定位到日志上。
gdb显示问题出在ftime()上。
// 取系统时间精确到ms
void CDTLog::GetSysDateTimeMill(char* tm)
{
struct timeb millsec;
ftime(&millsec);
char ls_time[20], t1[24];
time_t timer;
time(&timer);
struct tm* lt_time;
lt_time = localtime(&timer);
strftime(ls_time, 20, "%Y-%m-%d %H:%M:%S", lt_time);
sprintf(t1, "%s %3dms", ls_time, millsec.millitm);
sprintf(tm, "%s", t1);
}
换成C++的std::chrono就没这b问题了
// 取系统时间精确到ms
void CDTLog::GetSysDateTimeMill(char* str)
{
auto now = std::chrono::system_clock::now();
auto tt = std::chrono::system_clock::to_time_t(now);
tm tm_now = *gmtime(&tt);
auto ms =
std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch())
.count() %
1000;
strftime(str, 32, "%Y-%m-%d %H:%M:%S", &tm_now);
sprintf(str, "%s %dms", str, ms);
}