みんな、私はスレッド化とロギングの初心者です。ところで、私は英語を母国語としないので、英語に誤りがあればご容赦ください。
各スレッドが次のようなログ モジュールを使用するマルチスレッドソフトウェアを作成しました。
__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ミリ秒しかかからない処理が0.2秒以上かかってしまう問題を発見。終わる)。この問題の原因については現在も調査中ですが、まず、ロギング モジュールが既にスレッド セーフになっているかどうかを知りたいと思います。
ちなみに、パラメータ
について
"_level"
は、プロセスの詳細を印刷または非印刷するロギング
レベルです。、"domain"
"msg"
m_logFormatW
m_logFormatW = _T("[%.2d][%.4d-%.2d-%.2dT%.2d:%.2d:%.2d][%s] %s\n");
ご不明な点やご不明な点がございましたら、お気軽にお尋ねください。