#pragma once #include enum TRACER_TYPE { TRACER_OPE_PROGRESS = 0 /**< To indicate progress of operation. */ , TRACER_OPE_ERROR = 1 /**< To indicate Error is happened. */ , TRACER_OPE_EXCEPTION = 2 /**< To indicate exceptions. */ , TRACER_OPE_MESSAGE = 3 /**< To indicate message display. */ }; #define TRACER_OPE_PROGRESS_STR _T("_TRACE_: ")/**< To indicate progress of operation. */ #define TRACER_OPE_ERROR_STR _T("_ERROR_: ")/**< To indicate Error is happened. */ #define TRACER_OPE_EXCEPTION_STR _T("_EXCEPT_: ")/**< To indicate exceptions. */ #define TRACER_OPE_MESSAGE_STR _T("_MSG_: ")/**< To indicate message display */ class CCLogFile { public: CCLogFile(LPCTSTR szFileName, bool bLogNeedManage = true); ~CCLogFile(); public: void Print(LPCTSTR szData, ...); void Print(TRACER_TYPE nType, LPCTSTR szData, ...); void TraceProgress(LPCTSTR szFile, long lLine, LPCTSTR szData, ...); void TraceError(LPCTSTR szFile, long lLine, LPCTSTR szData, ...); void TraceException(LPCTSTR szFile, long lLine, LPCTSTR szData, ...); void TraceMessage(LPCTSTR szFile, long lLine, LPCTSTR szData, ...); void LogBinaryData(LPCTSTR szHead, BYTE* pbyData, UINT nLen); CString WChar2Ansi(LPCTSTR pwszSrc); CString StringToWString(const CString& s); private: // Methods. void LogFile(LPCTSTR szData); void PrintV(LPCTSTR pszFormat, va_list pArgList); void PrintV(TRACER_TYPE nType, LPCTSTR pszFormat, va_list pArgList); bool CheckFilePath(const CString& strPath); HANDLE CreateLogFile(const CString& str); private: // Data. CString m_szFile; ///@cond CHS ///临界区变量 ///@endcond ///@cond ENG ///Critical Section for text log ///@endcond CCriticalSection m_csLog; ///@cond CHS ///记录二进制数据临界区变量 ///@endcond ///@cond ENG ///Critical Section for binary log ///@endcond CCriticalSection m_csBinLog; ///@cond CHS ///日志文件名是否已经提交到LogManager ///@endcond ///@cond ENG ///Log filename commit to LogManager flag ///@endcond bool m_bFileNameCommited; }; class CUtilityTools { public: CUtilityTools(){} ~CUtilityTools() { } public: void WaitingWithEventLoop(int iWaitTime); };