Duilib官方迁移到Gitbub,没有任何新增功能与修改,仅为方便需要迁出代码的人

Duilib暂不会有新特性增加,但已经准备一段时间修改代码目录管理结构,重构Demo
闲置半年多未更新一方面忙于生计,也源于提高内功
感谢Duilib原作者同意迁移SVN官方地址,便于社区维护
最后特别感谢【Duilib官方交流群3】活跃开发者们的帮助指导,为Duilib的重构提供了很多帮助,也为我个人成长提供指导
This commit is contained in:
daviyang35
2014-07-28 21:58:31 +08:00
parent 2c97c05db4
commit 467cab8148
516 changed files with 81218 additions and 0 deletions
+249
View File
@@ -0,0 +1,249 @@
//
// debug.cpp
// ~~~~~~~~~
//
// Copyright (c) 2011 achellies (achellies at 163 dot com)
//
// This code may be used in compiled form in any way you desire. This
// source file may be redistributed by any means PROVIDING it is
// not sold for profit without the authors written consent, and
// providing that this notice and the authors name is included.
//
// This file is provided "as is" with no expressed or implied warranty.
// The author accepts no liability if it causes any damage to you or your
// computer whatsoever. It's free, so don't hassle me about it.
//
// Beware of bugs.
//
#include "stdafx.h"
#include "debug.hpp"
#include <winbase.h>
#if defined(DBG_THREADSAFE)
class OS_CLockable
{
public:
// ## Constructor / Destructor
OS_CLockable();
~OS_CLockable();
// ....................................................................
// METHOD NAME: Acquire
// DESCRIPTION:
// Acquires a lock, blocking.
// PARAMETERS:
// none
// RETURN VALUE:
// none
// ....................................................................
void Acquire();
// ....................................................................
// METHOD NAME: Release
// DESCRIPTION:
// Releases the lock.
// object.
// PARAMETERS:
// none
// RETURN VALUE:
// none
// ....................................................................
void Release();
private:
DWORD dwVersion;
DWORD dwWindowsMajorVersion;
DWORD dwWindowsMinorVersion;
// ## Instance Variables
CRITICAL_SECTION m_critSec;
// ## declarations with no implementations (prevent accidental use)
OS_CLockable (const OS_CLockable&);
OS_CLockable& operator= (const OS_CLockable&);
};
// ............................................................................
// CLASS NAME: OS_CAutoLock
//
// RESPONSIBILITIES:
// Provides automatic locking and unlocking of an OS_CLockable object
// within a code scope.
//
// NOTES:
// ............................................................................
class OS_CAutoLock
{
public:
// ## Constructors
OS_CAutoLock(OS_CLockable &lockable) : m_lockable(lockable)
{lockable.Acquire(); };
// ## Destructor
~OS_CAutoLock() { m_lockable.Release();};
private:
// The controlled lockable object
OS_CLockable &m_lockable;
// ## declarations with no implementations (prevent accidental use)
OS_CAutoLock ();
OS_CAutoLock (const OS_CAutoLock&);
OS_CAutoLock& operator= (const OS_CAutoLock&);
};
// ----------------------------------------------------------------------------
// OS_CLockable METHOD DEFINITIONS
// ----------------------------------------------------------------------------
// ...........................................................................
//
// NAME: OS_CLockable::OS_CLockable (Constructor)
//
// IMPLEMENTATION NOTES:
// ...........................................................................
OS_CLockable::OS_CLockable()
{
OSVERSIONINFO osvi = {0};
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
dwWindowsMajorVersion = osvi.dwMajorVersion;
dwWindowsMinorVersion = osvi.dwMinorVersion;
if(dwWindowsMajorVersion < 6)
::InitializeCriticalSection(&m_critSec);
return;
}
// ...........................................................................
//
// NAME: OS_CLockable::~OS_CLockable (Destructor)
//
// IMPLEMENTATION NOTES:
// ...........................................................................
OS_CLockable::~OS_CLockable()
{
if(dwWindowsMajorVersion < 6)
::DeleteCriticalSection(&m_critSec);
return;
}
// ...........................................................................
//
// NAME: OS_CLockable::Acquire
//
// IMPLEMENTATION NOTES:
// ...........................................................................
void OS_CLockable::Acquire()
{
if(dwWindowsMajorVersion < 6)
::EnterCriticalSection(&m_critSec);
}
// ...........................................................................
//
// NAME: OS_CLockable::Release
//
// IMPLEMENTATION NOTES:
// ...........................................................................
void OS_CLockable::Release()
{
if(dwWindowsMajorVersion < 6)
::LeaveCriticalSection(&m_critSec);
}
#endif
#define MAX_LOG_FILE_SIZE static_cast<int>(1024*1024/2)
#ifdef _DEBUG
int g_iDebugLevel = DBG_VERBOSE;
#else
int g_iDebugLevel = DBG_ERROR;
#endif
bool g_bSaveLogFile = false;
TCHAR g_bLogSavePath[MAX_PATH] = _T("C:\\log");
static TCHAR s_szLogFile[MAX_PATH] = {0};
static bool s_bLogPathInit = false;
#if defined(DBG_THREADSAFE)
static OS_CLockable s_mtxEntry;
#endif
BOOL DbgPrint(__in LPCTSTR lpszFormatString, ...)
{
BOOL bResult = TRUE;
va_list VAList;
va_start(VAList, lpszFormatString);
if (g_bSaveLogFile)
{
#if defined(DBG_THREADSAFE)
OS_CAutoLock lock(s_mtxEntry);
#endif
if (!s_bLogPathInit)
{
SYSTEMTIME stime = {0};
GetLocalTime(&stime);
#if defined(UNDER_CE)
_stprintf(s_szLogFile, _T("%s\\log_%04d%02d%02d_%d.log"), g_bLogSavePath, stime.wYear, stime.wMonth, stime.wDay, GetTickCount());
#else
_stprintf_s(s_szLogFile, MAX_PATH, _T("%s\\log_%04d%02d%02d_%d.log"), g_bLogSavePath, stime.wYear, stime.wMonth, stime.wDay, GetTickCount());
#endif
s_bLogPathInit = true;
}
FILE* pFile = _tfopen(s_szLogFile, _T("a"));
if (pFile != NULL)
{
fseek(pFile,SEEK_END,0);
long cbSize = ftell(pFile);
if (cbSize > MAX_LOG_FILE_SIZE)
{
fclose(pFile);
{
SYSTEMTIME stime = {0};
GetLocalTime(&stime);
#if defined(UNDER_CE)
_stprintf(s_szLogFile, _T("%s\\log_%04d%02d%02d_%d.log"), g_bLogSavePath, stime.wYear, stime.wMonth, stime.wDay, GetTickCount());
#else
_stprintf_s(s_szLogFile, MAX_PATH, _T("%s\\log_%04d%02d%02d_%d.log"), g_bLogSavePath, stime.wYear, stime.wMonth, stime.wDay, GetTickCount());
#endif
s_bLogPathInit = true;
}
pFile = _tfopen(s_szLogFile, _T("a"));
if (pFile == NULL)
{
return FALSE;
}
}
_vftprintf(pFile, lpszFormatString, VAList);
fflush(pFile);
fclose(pFile);
pFile = NULL;
}
}
else
{
#if defined(UNDER_CE)
_vtprintf(lpszFormatString, VAList);
#else
TCHAR szBuf[MAX_PATH * 2] = {0};
_vstprintf_s(szBuf, MAX_PATH, lpszFormatString, VAList);
OutputDebugString(szBuf);
#endif
}
va_end(VAList);
return bResult;
}