控制台日志类
日志无疑是打印程序信息、调试程序的最好方法之一。对于流程复杂的程序,出现了BUG但却难以发现,又想通过日志信息检查问题所在。本文实现了一个控制台类,在新的控制台窗口中打印日志,丝毫不影响原程序窗口或控制台的正常输出。原功能输出和日志信息分别显示在不同的窗口中,更易于分析程序执行过程,或查找问题所在。该类适合于WIN32控制台和窗口界面程序。
/************************************************************************************************************文件名:MyPrint.h功 能:在新建的控制台中输出打印日志说 明:在WINDOWS界面开发中经常需要打印软件流程的日志,特别是多线程情况下。运用该日志类可以在新建的控制台中输出日志信息,方便流程的跟踪和代码的调试。*************************************************************************************************************/#ifndef _CONSOLE_H_#define _CONSOLE_H_#include <Windows.h>class MyPrint{public: static MyPrint* GetInstance() { if (m_oConsole == NULL) { m_oConsole = new MyPrint(); } return m_oConsole; } void PrintLog(TCHAR* fmt,...) { DWORD dwLen; TCHAR cBuffer[BUF_ZISE] = {0}; va_list vp; va_start(vp,fmt); wvsprintf(cBuffer,fmt,vp); WriteConsole(m_hHandle,cBuffer,lstrlen(cBuffer),&dwLen,NULL); va_end(vp); }protected: BOOL CreateConsole() { if (AllocConsole()) { if (INVALID_HANDLE_VALUE == (m_hHandle = GetStdHandle(STD_OUTPUT_HANDLE))) { return FALSE; } return TRUE; } else { return FALSE; } } MyPrint() { CreateConsole(); } ~MyPrint() { if (m_hHandle != NULL) { FreeConsole(); } } enum { BUF_ZISE = 255 };private: HANDLE m_hHandle; static MyPrint* m_oConsole;};MyPrint* MyPrint::m_oConsole = NULL;#endif该类的使用非常简单,使用代码就不贴上来了。