#pragma once
#pragma warning(disable: 4996)
#include "Common.h"
#include "CirticalSection.h"
class CDebugOutput;
#define DebugString (CDebugOutput::GetInstance()->DebugStringInfo)
class CDebugOutput
{
public:
static CDebugOutput* GetInstance();
static void ReleaseInstance();
int DebugStringInfo(HANDLE hThread, const TCHAR * pszFormat, ...);
private:
CDebugOutput(void);
CDebugOutput(const CDebugOutput& rhs);
~CDebugOutput(void);
static CDebugOutput* m_pInstance;
CCirticalSection m_CirticalSection;
};
#include "StdAfx.h"
#include "DebugOutput.h"
CDebugOutput* CDebugOutput::m_pInstance = NULL;
CDebugOutput::CDebugOutput(void)
{
}
CDebugOutput::~CDebugOutput(void)
{
}
CDebugOutput* CDebugOutput::GetInstance()
{
if (m_pInstance == NULL) m_pInstance = new CDebugOutput;
return m_pInstance;
}
void CDebugOutput::ReleaseInstance()
{
if (m_pInstance)
{
delete m_pInstance;
m_pInstance = NULL;
}
}
int CDebugOutput::DebugStringInfo(HANDLE hThread, const TCHAR * pszFormat, ...)
{
static SYSTEMTIME st;
static TCHAR time[64];
static TCHAR buffer[1024] = {0};
m_CirticalSection.Lock();
GetLocalTime(&st);
_stprintf_s(time, 64 - 1, _T("%02d:%02d:%02d.%03d [%08x] "), st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, hThread);
va_list args;
va_start(args, pszFormat);
_vsntprintf(buffer, 1024 - 1, pszFormat, args);
va_end(args);
OutputDebugString(time);
OutputDebugString(buffer);
m_CirticalSection.Unlock();
return 0;
}