伙计们,我是线程和日志记录的初学者。顺便说一句,我不是以英语为母语的人,如果我的英语有任何错误,请原谅我。
我创建了一个多线程软件,其中每个线程使用如下日志模块:每个线程使用不同的日志文件,所以我认为发生数据冲突的机会是 0。
__inline void print_logW(int _level,const wchar_t *domain,const wchar_t *msg)
{
wchar_t mess[200] = _T("");
if(_level<=traceLevel)
{
__time64_t timer;
struct tm t_st;
_time64(&timer);
localtime_s(&t_st,&timer);
if (domain == NULL)
{
domain = _T("");
}
if (msg != NULL)
{
if (showTimeStampFlag == true)
{
swprintf_s(mess,200,_T("%s : %ld"),msg,GetTickCount());
}
else
{
wcscpy_s(mess,200,msg);
}
}
if(oldTime.tm_year != t_st.tm_year || oldTime.tm_mon != t_st.tm_mon || oldTime.tm_mday != t_st.tm_mday)
{
oldTime = t_st;
print_log_preparebyDateW();
}
FILE* fp;
errno_t err = _wfopen_s(&fp, this->m_pathW, _T("at+, ccs=UTF-8"));
if (err != 0)
{
// error
return;
}
fwprintf_s(fp, m_logFormatW,
_level,
1900 + t_st.tm_year, t_st.tm_mon + 1, t_st.tm_mday,
t_st.tm_hour, t_st.tm_min, t_st.tm_sec,
domain, mess
);
fflush(fp);
fclose(fp);
}
}
当我看到我制作的软件的日志时,我发现了一个问题,有时线程进程变得如此缓慢(一个进程(例如获取图像的指针)通常只需要16 ms max,将需要0.2 秒或更多完成)。我仍在调查此问题的原因,但首先,我想知道日志记录模块是否已经是线程安全的。
顺便说一句,对于参数,
"_level"
是打印或取消打印进程的详细信息的日志级别,
我"domain"
用来显示执行日志记录的类是日志
"msg"
的内容(例如“进程 1 启动”
)m_logFormatW
,
m_logFormatW = _T("[%.2d][%.4d-%.2d-%.2dT%.2d:%.2d:%.2d][%s] %s\n");
如果有任何问题或不清楚的地方,请随时提问。