Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jlib
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
captainwong
jlib
Commits
9910e719
Commit
9910e719
authored
Dec 08, 2015
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
save
parent
8b06dd1d
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
79 additions
and
205 deletions
+79
-205
FileOper.h
FileOper.h
+1
-11
Log.h
Log.h
+38
-82
MtVerify.h
MtVerify.h
+0
-107
global.h
global.h
+2
-3
mem.h
mem.h
+0
-0
safe_mem.h
safe_mem.h
+35
-0
test.cpp
test/test/test.cpp
+3
-2
No files found.
FileOper.h
View file @
9910e719
// FileOper.h: interface for the CFileOper class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_FILEOPER_H__25D4B209_DAC6_4D93_98B2_692621E5508F__INCLUDED_)
#define AFX_FILEOPER_H__25D4B209_DAC6_4D93_98B2_692621E5508F__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#pragma once
#endif // _MSC_VER > 1000
#include <stdio.h>
#include <stdio.h>
#include <shellapi.h>
#include <shellapi.h>
#include <Shlobj.h>
#include <Shlobj.h>
#include "
MtVerify
.h"
#include "
safe_mem
.h"
static
int
CALLBACK
BrowseCallbackProc
(
HWND
hwnd
,
UINT
uMsg
,
LPARAM
lParam
,
LPARAM
lpData
)
static
int
CALLBACK
BrowseCallbackProc
(
HWND
hwnd
,
UINT
uMsg
,
LPARAM
lParam
,
LPARAM
lpData
)
{
{
...
@@ -313,4 +304,3 @@ protected:
...
@@ -313,4 +304,3 @@ protected:
}
}
};
};
#endif // !defined(AFX_FILEOPER_H__25D4B209_DAC6_4D93_98B2_692621E5508F__INCLUDED_)
Log.h
View file @
9910e719
// Log.h: interface for the CLog class.
// Log.h: interface for the CLog class.
//
//
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
/*
日志类CLog
简述:单例的日志输出类,使用时会自动构造,但因为要保证日志类最后一个析构,需要手动释放
功能:写日志,输出TRACE内容到dbgview,console。
使用:
使用函数
static void SetOutputLogFileName(LPCTSTR szFileName);
static void SetOutputConsole(BOOL bFlag);
static void SetOutputDbgView(BOOL bFlag);
static void SetOutputLogFile(BOOL bFlag);
来设置输出日志的方式
使用TRACE或使用函数static void WriteLog(const char* format, ...);写日志,可接受可变参数
释放:在程序退出时(ExitInstance()函数的最后)调用CLog::Release()释放引用计数
*/
#if !defined(AFX_ERRORLOG_H__46D664F1_E737_46B7_9813_2EF1415FF884__INCLUDED_)
#define AFX_ERRORLOG_H__46D664F1_E737_46B7_9813_2EF1415FF884__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#pragma once
#endif // _MSC_VER > 1000
#include <assert.h>
//#include "dbghlpapi.h"
//#ifdef TRACE
#include <assert.h>
//#undef TRACE
#include <fstream>
//#define TRACE CLog::WriteLog
#include <string>
//#endif
#include <mutex>
namespace
jlib
namespace
jlib
{
{
#define MAX_OUTPUT_LEN (1024 * 64)
#define MAX_FILE_LEN (1024 * 1024 * 10)
#define IMPLEMENT_CLASS_LOG_STATIC_MEMBER \
#define IMPLEMENT_CLASS_LOG_STATIC_MEMBER \
CRITICAL_SECTION
CLog
::
m_cs
;
\
CRITICAL_SECTION
CLog
::
m_cs
;
\
...
@@ -42,37 +22,24 @@ namespace jlib
...
@@ -42,37 +22,24 @@ namespace jlib
CLog
*
CLog
::
m_pInstance
=
NULL
;
\
CLog
*
CLog
::
m_pInstance
=
NULL
;
\
TCHAR
CLog
::
g_szFileName
[
1024
]
=
{
0
};
TCHAR
CLog
::
g_szFileName
[
1024
]
=
{
0
};
/*
#define TRACEFUNCNAME \
CString str = _T("");\
INIT_SYM(TRUE);\
str.Format("File %s, line %d, funcname %s\n", __FILE__, __LINE__, __FUNCNAME__);\
OutputDebugString(str);\
UNINIT_SYM();\
*/
#define MAX_OUTPUT_LEN (1024 * 64)
#define MAX_FILE_LEN (1024 * 1024 * 10)
//static TCHAR g_szFileName[1024] = {0};
class
CLog
class
CLog
{
{
private
:
private
:
#pragma region private members
#pragma region private members
double
exe_time
;
double
exe_time
;
LARGE_INTEGER
freq
;
bool
m_bOutputLogFile
;
LARGE_INTEGER
start_t
,
stop_t
;
bool
m_bOutputDbgView
;
BOOL
m_bOutputLogFile
;
bool
m_bOutputConsole
;
BOOL
m_bOutputDbgView
;
bool
m_bConsoleOpened
;
BOOL
m_bOutputConsole
;
bool
m_bDbgviewOpened
;
BOOL
m_bConsoleOpened
;
bool
m_bLogFileOpened
;
BOOL
m_bDbgviewOpened
;
bool
m_bRunning
;
BOOL
m_bLogFileOpened
;
BOOL
m_bRunning
;
FILE
*
m_pLogFile
;
FILE
*
m_pLogFile
;
PROCESS_INFORMATION
pi
;
static
std
::
wstring
_log_file_path
;
static
TCHAR
g_szFileName
[
1024
];
static
std
::
mutex
_lock
;
static
CRITICAL_SECTION
m_cs
;
static
std
::
mutex
_lock_for_singleton
;
static
CLock
m_lockForSingleton
;
static
char
m_ansiBuf
[
MAX_OUTPUT_LEN
];
static
char
m_ansiBuf
[
MAX_OUTPUT_LEN
];
static
wchar_t
m_utf16Buf
[
MAX_OUTPUT_LEN
];
static
wchar_t
m_utf16Buf
[
MAX_OUTPUT_LEN
];
static
CLog
*
m_pInstance
;
static
CLog
*
m_pInstance
;
...
@@ -81,62 +48,51 @@ namespace jlib
...
@@ -81,62 +48,51 @@ namespace jlib
public
:
public
:
#pragma region public functions
#pragma region public functions
static
const
wchar_t
*
GetLogFilePath
()
{
return
g_szFileName
;
}
static
std
::
wstring
GetLogFilePath
()
{
return
_log_file_path
;
}
static
CLog
*
GetInstance
()
static
CLog
*
GetInstance
()
{
{
m_lockForSingleton
.
Lock
(
);
std
::
lock_guard
<
std
::
mutex
>
lg
(
_lock_for_singleton
);
if
(
CLog
::
m_pInstance
==
NULL
)
{
if
(
CLog
::
m_pInstance
==
NULL
)
{
static
CLog
log
;
static
CLog
log
;
CLog
::
m_pInstance
=
&
log
;
CLog
::
m_pInstance
=
&
log
;
}
}
m_lockForSingleton
.
UnLock
();
return
CLog
::
m_pInstance
;
return
CLog
::
m_pInstance
;
}
}
~
CLog
()
~
CLog
()
{
{
m_bRunning
=
FALSE
;
//WaitTillThreadExited(m_handle);
if
(
m_bConsoleOpened
)
if
(
m_bConsoleOpened
)
OpenConsole
(
FALSE
);
OpenConsole
(
false
);
if
(
m_bDbgviewOpened
)
if
(
m_bDbgviewOpened
)
OpenDbgview
(
FALSE
);
OpenDbgview
(
false
);
if
(
m_bLogFileOpened
)
if
(
m_bLogFileOpened
)
CloseLogFile
();
CloseLogFile
();
DeleteCriticalSection
(
&
m_cs
);
#ifdef _DEBUG
TCHAR
buf
[
1024
],
out
[
1024
];
wsprintf
(
buf
,
_T
(
"%s
\n
"
),
_T
(
"CLog::~CLog() destruction"
));
FormatBuf
(
buf
,
out
,
1024
);
OutputDebugString
(
out
);
#endif
}
}
static
void
SetOutputLogFile
Name
(
LPCTSTR
szLastName
)
static
void
SetOutputLogFile
Path
(
const
std
::
wstring
&
logFilePath
)
{
{
lstrcpy
(
g_szFileName
,
szLastName
)
;
_log_file_path
=
_log_file_path
;
}
}
static
void
SetOutputConsole
(
BOOL
bFlag
)
static
void
SetOutputConsole
(
bool
b
=
true
)
{
{
CLog
*
plog
=
CLog
::
GetInstance
();
CLog
*
plog
=
CLog
::
GetInstance
();
plog
->
m_bOutputConsole
=
b
Flag
;
plog
->
m_bOutputConsole
=
b
;
plog
->
OpenConsole
(
b
Flag
);
plog
->
OpenConsole
(
b
);
}
}
static
void
SetOutputDbgView
(
BOOL
bFlag
)
static
void
SetOutputDbgView
(
bool
b
=
true
)
{
{
CLog
*
plog
=
CLog
::
GetInstance
();
CLog
*
plog
=
CLog
::
GetInstance
();
plog
->
m_bOutputDbgView
=
bFlag
;
plog
->
m_bOutputDbgView
=
b
;
//plog->OpenDbgview(bFlag);
}
}
static
void
SetOutputLogFile
(
BOOL
bFlag
)
static
void
SetOutputLogFile
(
bool
b
=
true
)
{
{
CLog
*
plog
=
CLog
::
GetInstance
();
CLog
*
plog
=
CLog
::
GetInstance
();
plog
->
m_bOutputLogFile
=
b
Flag
;
plog
->
m_bOutputLogFile
=
b
;
if
(
plog
->
m_bOutputLogFile
&&
lstrlen
(
g_szFileName
)
==
0
)
if
(
plog
->
m_bOutputLogFile
&&
!
_log_file_path
.
empty
()
)
plog
->
CreateFileName
();
plog
->
CreateFileName
();
}
}
...
@@ -146,7 +102,7 @@ namespace jlib
...
@@ -146,7 +102,7 @@ namespace jlib
CLog
*
plog
=
CLog
::
GetInstance
();
CLog
*
plog
=
CLog
::
GetInstance
();
if
(
plog
==
NULL
)
if
(
plog
==
NULL
)
return
;
return
;
CLocalLock
lock
(
&
m_cs
);
std
::
lock_guard
<
std
::
mutex
>
lg
(
_lock
);
if
(
plog
->
m_bOutputLogFile
||
plog
->
m_bOutputDbgView
||
plog
->
m_bOutputConsole
)
{
if
(
plog
->
m_bOutputLogFile
||
plog
->
m_bOutputDbgView
||
plog
->
m_bOutputConsole
)
{
size_t
output_len
=
buff_len
*
6
+
64
;
size_t
output_len
=
buff_len
*
6
+
64
;
wchar_t
*
output
=
new
wchar_t
[
output_len
];
wchar_t
*
output
=
new
wchar_t
[
output_len
];
...
@@ -176,7 +132,7 @@ namespace jlib
...
@@ -176,7 +132,7 @@ namespace jlib
CLog
*
plog
=
CLog
::
GetInstance
();
CLog
*
plog
=
CLog
::
GetInstance
();
if
(
plog
==
NULL
)
if
(
plog
==
NULL
)
return
;
return
;
CLocalLock
lock
(
&
m_cs
);
std
::
lock_guard
<
std
::
mutex
>
lg
(
_lock
);
if
(
plog
->
m_bOutputLogFile
||
plog
->
m_bOutputDbgView
||
plog
->
m_bOutputConsole
)
{
if
(
plog
->
m_bOutputLogFile
||
plog
->
m_bOutputDbgView
||
plog
->
m_bOutputConsole
)
{
size_t
output_len
=
buff_len
*
6
+
64
;
size_t
output_len
=
buff_len
*
6
+
64
;
wchar_t
*
output
=
new
wchar_t
[
output_len
];
wchar_t
*
output
=
new
wchar_t
[
output_len
];
...
@@ -200,15 +156,15 @@ namespace jlib
...
@@ -200,15 +156,15 @@ namespace jlib
}
}
}
}
static
void
WriteLog
(
const
TCHAR
*
format
,
...)
static
void
WriteLog
(
const
wchar_t
*
format
,
...)
{
{
try
{
try
{
CLog
*
plog
=
CLog
::
GetInstance
();
CLog
*
plog
=
CLog
::
GetInstance
();
if
(
plog
==
NULL
)
if
(
plog
==
NULL
)
return
;
return
;
CLocalLock
lock
(
&
m_cs
);
std
::
lock_guard
<
std
::
mutex
>
lg
(
_lock
);
if
(
plog
->
m_bOutputLogFile
||
plog
->
m_bOutputDbgView
||
plog
->
m_bOutputConsole
)
{
if
(
plog
->
m_bOutputLogFile
||
plog
->
m_bOutputDbgView
||
plog
->
m_bOutputConsole
)
{
static
TCHAR
buf
[
MAX_OUTPUT_LEN
],
output
[
MAX_OUTPUT_LEN
],
*
p
;
static
wchar_t
buf
[
MAX_OUTPUT_LEN
],
output
[
MAX_OUTPUT_LEN
],
*
p
;
p
=
buf
;
p
=
buf
;
va_list
args
;
va_list
args
;
va_start
(
args
,
format
);
va_start
(
args
,
format
);
...
@@ -233,7 +189,7 @@ namespace jlib
...
@@ -233,7 +189,7 @@ namespace jlib
CLog
*
plog
=
CLog
::
GetInstance
();
CLog
*
plog
=
CLog
::
GetInstance
();
if
(
plog
==
NULL
)
if
(
plog
==
NULL
)
return
;
return
;
CLocalLock
lock
(
&
m_cs
);
std
::
lock_guard
<
std
::
mutex
>
lg
(
_lock
);
if
(
plog
->
m_bOutputLogFile
||
plog
->
m_bOutputDbgView
||
plog
->
m_bOutputConsole
)
{
if
(
plog
->
m_bOutputLogFile
||
plog
->
m_bOutputDbgView
||
plog
->
m_bOutputConsole
)
{
static
wchar_t
buf
[
MAX_OUTPUT_LEN
],
*
p
;
static
wchar_t
buf
[
MAX_OUTPUT_LEN
],
*
p
;
p
=
buf
;
p
=
buf
;
...
@@ -274,7 +230,7 @@ namespace jlib
...
@@ -274,7 +230,7 @@ namespace jlib
CLog
*
plog
=
CLog
::
GetInstance
();
CLog
*
plog
=
CLog
::
GetInstance
();
if
(
plog
==
NULL
)
if
(
plog
==
NULL
)
return
;
return
;
CLocalLock
lock
(
&
m_cs
);
std
::
lock_guard
<
std
::
mutex
>
lg
(
_lock
);
if
(
plog
->
m_bOutputLogFile
||
plog
->
m_bOutputDbgView
||
plog
->
m_bOutputConsole
)
{
if
(
plog
->
m_bOutputLogFile
||
plog
->
m_bOutputDbgView
||
plog
->
m_bOutputConsole
)
{
static
char
buf
[
MAX_OUTPUT_LEN
],
*
p
;
static
char
buf
[
MAX_OUTPUT_LEN
],
*
p
;
p
=
buf
;
p
=
buf
;
...
...
MtVerify.h
View file @
9910e719
...
@@ -3,113 +3,6 @@
...
@@ -3,113 +3,6 @@
#include <crtdbg.h>
#include <crtdbg.h>
#include <tchar.h>
#include <tchar.h>
#pragma comment(lib, "version.lib")
#pragma comment(lib, "version.lib")
#define MTVERIFY(a) (a)
#if 0
#define SHOWERROR(a) PrintError(a,__FILE__,__LINE__,GetLastError())
#ifdef DEBUG
#define MTASSERT(a) _ASSERTE(a)
#define MTVERIFY(a) if (!(a)) PrintError(#a,__FILE__,__LINE__,GetLastError())
#else /*DEBUG*/
#define MTASSERT(a)
#define MTVERIFY(a) (a)
#endif /*DEBUG*/
__inline
void
PrintError
(
LPCTSTR
linedesc
,
LPCTSTR
filename
,
int
lineno
,
DWORD
errnum
)
{
LPTSTR
lpBuffer
;
TCHAR
errbuf
[
256
];
#ifdef _WINDOWS_
TCHAR
modulename
[
MAX_PATH
];
#else //_WINDOWS_
DWORD
numread
;
#endif //_WINDOWS_
FormatMessage
(
FORMAT_MESSAGE_ALLOCATE_BUFFER
|
FORMAT_MESSAGE_FROM_SYSTEM
,
NULL
,
errnum
,
LANG_NEUTRAL
,
(
LPTSTR
)
&
lpBuffer
,
0
,
NULL
);
_stprintf
(
errbuf
,
_T
(
"
\n
The following call failed at line %d in %s:
\n\n
%s
\n\n
Reason: %s
\n
"
),
lineno
,
filename
,
linedesc
,
lpBuffer
);
#ifndef _WINDOWS_
WriteFile
(
GetStdHandle
(
STD_ERROR_HANDLE
),
errbuf
,
lstrlen
(
errbuf
),
&
numread
,
FALSE
);
Sleep
(
3000
);
#else //_WINDOWS_
GetModuleFileName
(
NULL
,
modulename
,
MAX_PATH
);
MessageBox
(
NULL
,
errbuf
,
modulename
,
MB_ICONWARNING
|
MB_OK
|
MB_TASKMODAL
|
MB_SETFOREGROUND
);
OutputDebugString
(
errbuf
);
#endif //_WINDOWS_
LocalFree
(
lpBuffer
);
//exit(EXIT_FAILURE);
}
#endif
__inline
void
WaitTillThreadActive
(
HANDLE
&
handle
)
{
if
(
handle
!=
INVALID_HANDLE_VALUE
)
{
BOOL
rc
=
FALSE
;
DWORD
ec
=
0
;
for
(;;)
{
rc
=
GetExitCodeThread
(
handle
,
&
ec
);
if
(
rc
&&
(
ec
==
STILL_ACTIVE
))
break
;
Sleep
(
500
);
}
}
}
// obsolete
/*
__inline void WaitTillThreadExited(HANDLE &handle, DWORD dwMilliseconds = 3000)
{
if(handle != INVALID_HANDLE_VALUE)
{
BOOL rc = FALSE;
DWORD ec = 0;
DWORD dwStart = GetTickCount();
for(;;)
{
if(GetTickCount() - dwStart >= dwMilliseconds)
{
::TerminateThread(handle, 0xffffffff);
CloseHandle(handle);
handle = INVALID_HANDLE_VALUE;
break;
}
if(handle == INVALID_HANDLE_VALUE)
break;
rc = GetExitCodeThread(handle, &ec);
if(rc && (ec != STILL_ACTIVE))
{
CloseHandle(handle);
handle = INVALID_HANDLE_VALUE;
break;
}
Sleep(500);
}
}
}
*/
__forceinline
void
WaitTillThreadExited
(
HANDLE
&
handle
,
DWORD
dwMilliseconds
=
5000
)
{
if
(
handle
==
INVALID_HANDLE_VALUE
)
return
;
DWORD
ret
=
::
WaitForSingleObject
(
handle
,
dwMilliseconds
);
if
(
ret
!=
WAIT_OBJECT_0
)
{
//::TerminateThread(handle, 0xffffffff);
}
CloseHandle
(
handle
);
handle
=
INVALID_HANDLE_VALUE
;
}
__inline
LPTSTR
GetModuleFilePath
()
__inline
LPTSTR
GetModuleFilePath
()
{
{
...
...
global.h
View file @
9910e719
#pragma once
#pragma once
#include <chrono>
#include <chrono>
#include "safe_mem.h"
#include "utf8.h"
#include "utf8.h"
#include "LocalLock.h"
#include "mtverify.h"
#include "FileOper.h"
#include "Log.h"
#include "Log.h"
#include "MyWSAError.h"
#include "MyWSAError.h"
#include "observer_macro.h"
#include "observer_macro.h"
...
...
mem.h
0 → 100644
View file @
9910e719
safe_mem.h
0 → 100644
View file @
9910e719
#pragma once
/////////*********************自定义宏********************////////////////////////
//安全删除普通堆内存
#define SAFEDELETEP(p) {if(p){delete (p); (p)=NULL;}}
#define SAFEDELETEARR(pArr) {if((pArr)){delete[] (pArr); (pArr)=NULL;}}
//安全删除对话框类堆内存
#define SAFEDELETEDLG(pDlg) {\
if
((
pDlg
))
{
\
if
(
::
IsWindow
(
pDlg
->
m_hWnd
))
{
\
(
pDlg
)
->
DestroyWindow
();
\
}
\
delete
(
pDlg
);
\
(
pDlg
)
=
NULL
;
\
}
\
}
//关闭核心对象句柄
#define CLOSEHANDLE(h){\
if
(
h
!=
INVALID_HANDLE_VALUE
&&
h
!=
NULL
)
{
\
::
CloseHandle
(
h
);
\
h
=
INVALID_HANDLE_VALUE
;
\
}
\
}
#define CLOSESOCKET(s){\
if
(
s
!=
INVALID_SOCKET
)
{
\
::
closesocket
(
s
);
\
s
=
INVALID_SOCKET
;
\
}
\
}
test/test/test.cpp
View file @
9910e719
...
@@ -2,8 +2,9 @@
...
@@ -2,8 +2,9 @@
//
//
#include "stdafx.h"
#include "stdafx.h"
#include "../../global.h"
#include "../../safe_mem.h"
#include "../../utf8.h"
#include "../../Log.h"
int
main
()
int
main
()
{
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment