读书人

控制台日记类

发布时间: 2013-10-19 20:58:22 作者: rapoo

控制台日志类

日志无疑是打印程序信息、调试程序的最好方法之一。对于流程复杂的程序,出现了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
该类的使用非常简单,使用代码就不贴上来了。

读书人网 >其他相关

热点推荐