void StopLogger() { CAutoLock logLock(&m_logLock); if (m_hLogger) { //Make sure the thread runs soon so it can finish processing SetThreadPriority(m_hLogger, THREAD_PRIORITY_NORMAL); m_bLoggerRunning = FALSE; m_EndLoggingEvent.Set(); WaitForSingleObject(m_hLogger, INFINITE); m_EndLoggingEvent.Reset(); CloseHandle(m_hLogger); m_hLogger = NULL; logFileParsed = -1; logFileDate = -1; instanceID = 0; } }
void Log(const char *fmt, ...) { static CCritSec lock; va_list ap; va_start(ap, fmt); CAutoLock logLock(&lock); if (!m_hLogger) { m_bLoggerRunning = true; StartLogger(); } char buffer[1000]; int ret; va_start(ap, fmt); ret = vsprintf(buffer, fmt, ap); va_end(ap); if (ret < 0) return; SYSTEMTIME systemTime; GetLocalTime(&systemTime); char msg[500]; sprintf_s(msg, 500,"%02.2d-%02.2d-%04.4d %02.2d:%02.2d:%02.2d.%03.3d [%5x] %s\n", systemTime.wDay, systemTime.wMonth, systemTime.wYear, systemTime.wHour, systemTime.wMinute, systemTime.wSecond, systemTime.wMilliseconds, GetCurrentThreadId(), buffer); CAutoLock l(&m_qLock); m_logQueue.push((string)msg); m_eLog.Set(); }