File tree 8 files changed +54
-28
lines changed 8 files changed +54
-28
lines changed Original file line number Diff line number Diff line change 1
- /* ////////////////////////////////////////////////////////////////////
1
+ /*
2
2
@Brief: 追踪C++类的内存分配和释放
3
3
@Author: vilas wang
4
- @Contact: QQ451930733|[email protected]
4
+ @Contact: QQ451930733
5
5
6
6
【用法】
7
7
@@ -18,7 +18,7 @@ A() { TRACE_CLASS_CONSTRUCTOR(A); }
18
18
19
19
3: 最后等需要知道类内存分配和释放情况的时候(比如程序退出前)打印信息
20
20
TRACE_CLASS_CHECK_LEAKS();
21
- /////////////////////////////////////////////////////////////////////////////////////// */
21
+ */
22
22
23
23
#pragma once
24
24
#include < windows.h>
@@ -29,29 +29,29 @@ TRACE_CLASS_CHECK_LEAKS();
29
29
30
30
#ifndef TRACE_CLASS_CONSTRUCTOR
31
31
#ifdef TRACE_CLASS_MEMORY_ENABLED
32
- #define TRACE_CLASS_CONSTRUCTOR (T ) VCUtility ::ClassMemoryTracer::addRef<T>()
32
+ #define TRACE_CLASS_CONSTRUCTOR (T ) VCUtil ::ClassMemoryTracer::addRef<T>()
33
33
#else
34
34
#define TRACE_CLASS_CONSTRUCTOR (T ) __noop
35
35
#endif
36
36
#endif
37
37
38
38
#ifndef TRACE_CLASS_DESTRUCTOR
39
39
#ifdef TRACE_CLASS_MEMORY_ENABLED
40
- #define TRACE_CLASS_DESTRUCTOR (T ) VCUtility ::ClassMemoryTracer::release<T>()
40
+ #define TRACE_CLASS_DESTRUCTOR (T ) VCUtil ::ClassMemoryTracer::release<T>()
41
41
#else
42
42
#define TRACE_CLASS_DESTRUCTOR (T ) __noop
43
43
#endif
44
44
#endif
45
45
46
46
#ifndef TRACE_CLASS_CHECK_LEAKS
47
47
#ifdef TRACE_CLASS_MEMORY_ENABLED
48
- #define TRACE_CLASS_CHECK_LEAKS () VCUtility ::ClassMemoryTracer::checkMemoryLeaks()
48
+ #define TRACE_CLASS_CHECK_LEAKS () VCUtil ::ClassMemoryTracer::checkMemoryLeaks()
49
49
#else
50
50
#define TRACE_CLASS_CHECK_LEAKS () __noop
51
51
#endif
52
52
#endif
53
53
54
- namespace VCUtility {
54
+ namespace VCUtil {
55
55
56
56
class ClassMemoryTracer
57
57
{
Original file line number Diff line number Diff line change
1
+ /*
2
+ @Brief: windowsËø
3
+ @Author: vilas wang
4
+ @Contact: QQ451930733
5
+ */
6
+
1
7
#pragma once
2
8
#include < windows.h>
3
9
#include < memory>
4
10
5
- namespace VCUtility {
11
+ namespace VCUtil {
12
+
6
13
// Class CSLock - ¹Ø¼ü¶ÎËø
7
14
class CSLock
8
15
{
9
16
public:
10
17
CSLock ();
11
18
~CSLock ();
12
19
13
- void lock ();
14
- bool tryLock ();
15
- void unlock ();
20
+ virtual void lock ();
21
+ virtual bool tryLock ();
22
+ virtual void unlock ();
16
23
17
24
private:
18
25
CSLock (const CSLock &);
@@ -29,8 +36,9 @@ namespace VCUtility {
29
36
SRWLock ();
30
37
~SRWLock ();
31
38
32
- void lock (bool bShared = false );
33
- void unlock ();
39
+ virtual void lock (bool bShared = false );
40
+ virtual bool tryLock (bool bShared = false );
41
+ virtual void unlock ();
34
42
35
43
private:
36
44
SRWLock (const SRWLock &);
Original file line number Diff line number Diff line change @@ -119,7 +119,7 @@ Q_DECLARE_METATYPE(RequestTask);
119
119
typedef QVector<RequestTask> BatchRequestTask;
120
120
121
121
122
- inline const QString getTypeString (RequestType eType)
122
+ inline const QString getTypeString (const RequestType eType)
123
123
{
124
124
QString strType;
125
125
switch (eType)
Original file line number Diff line number Diff line change 1
1
/*
2
2
@Brief: Qt multi-threaded network module
3
3
@Author: vilas wang
4
- @Contact: QQ451930733|[email protected]
4
+ @Contact: QQ451930733
5
5
6
6
The Qt multi-threaded network module is a wrapper of Qt Network module, and combine with thread-pool to realize multi-threaded networking.
7
7
- Multi-task concurrent(Each request task is executed in different threads).
Original file line number Diff line number Diff line change 3
3
#include < vector>
4
4
#include < algorithm>
5
5
6
- namespace VCUtility
6
+ namespace VCUtil
7
7
{
8
8
CSLock ClassMemoryTracer::m_lock;
9
9
ClassMemoryTracer::TClassRefCount ClassMemoryTracer::s_mapRefCount;
Original file line number Diff line number Diff line change @@ -29,29 +29,29 @@ TRACE_CLASS_CHECK_LEAKS();
29
29
30
30
#ifndef TRACE_CLASS_CONSTRUCTOR
31
31
#ifdef TRACE_CLASS_MEMORY_ENABLED
32
- #define TRACE_CLASS_CONSTRUCTOR (T ) VCUtility ::ClassMemoryTracer::addRef<T>()
32
+ #define TRACE_CLASS_CONSTRUCTOR (T ) VCUtil ::ClassMemoryTracer::addRef<T>()
33
33
#else
34
34
#define TRACE_CLASS_CONSTRUCTOR (T ) __noop
35
35
#endif
36
36
#endif
37
37
38
38
#ifndef TRACE_CLASS_DESTRUCTOR
39
39
#ifdef TRACE_CLASS_MEMORY_ENABLED
40
- #define TRACE_CLASS_DESTRUCTOR (T ) VCUtility ::ClassMemoryTracer::release<T>()
40
+ #define TRACE_CLASS_DESTRUCTOR (T ) VCUtil ::ClassMemoryTracer::release<T>()
41
41
#else
42
42
#define TRACE_CLASS_DESTRUCTOR (T ) __noop
43
43
#endif
44
44
#endif
45
45
46
46
#ifndef TRACE_CLASS_CHECK_LEAKS
47
47
#ifdef TRACE_CLASS_MEMORY_ENABLED
48
- #define TRACE_CLASS_CHECK_LEAKS () VCUtility ::ClassMemoryTracer::checkMemoryLeaks()
48
+ #define TRACE_CLASS_CHECK_LEAKS () VCUtil ::ClassMemoryTracer::checkMemoryLeaks()
49
49
#else
50
50
#define TRACE_CLASS_CHECK_LEAKS () __noop
51
51
#endif
52
52
#endif
53
53
54
- namespace VCUtility {
54
+ namespace VCUtil {
55
55
56
56
class ClassMemoryTracer
57
57
{
Original file line number Diff line number Diff line change 8
8
#include < windows.h>
9
9
#include < memory>
10
10
11
- namespace VCUtility {
11
+ namespace VCUtil {
12
+
12
13
// Class CSLock - ¹Ø¼ü¶ÎËø
13
14
class CSLock
14
15
{
15
16
public:
16
17
CSLock ();
17
18
~CSLock ();
18
19
19
- void lock ();
20
- bool tryLock ();
21
- void unlock ();
20
+ virtual void lock ();
21
+ virtual bool tryLock ();
22
+ virtual void unlock ();
22
23
23
24
private:
24
25
CSLock (const CSLock &);
@@ -35,8 +36,9 @@ namespace VCUtility {
35
36
SRWLock ();
36
37
~SRWLock ();
37
38
38
- void lock (bool bShared = false );
39
- void unlock ();
39
+ virtual void lock (bool bShared = false );
40
+ virtual bool tryLock (bool bShared = false );
41
+ virtual void unlock ();
40
42
41
43
private:
42
44
SRWLock (const SRWLock &);
Original file line number Diff line number Diff line change 2
2
#include " Lock.h"
3
3
#include < winnt.h>
4
4
5
- using namespace VCUtility ;
5
+ using namespace VCUtil ;
6
6
7
7
CSLock::CSLock ()
8
8
{
@@ -16,7 +16,7 @@ CSLock::~CSLock()
16
16
17
17
bool CSLock::tryLock ()
18
18
{
19
- return ( bool ) TryEnterCriticalSection (&m_cs);
19
+ return TryEnterCriticalSection (&m_cs);
20
20
}
21
21
22
22
void CSLock::lock ()
@@ -42,6 +42,22 @@ SRWLock::~SRWLock()
42
42
unlock ();
43
43
}
44
44
45
+ bool SRWLock::tryLock (bool bShared)
46
+ {
47
+ BOOL success = FALSE ;
48
+ if (bShared)
49
+ {
50
+ success = TryAcquireSRWLockShared (&m_lock);
51
+ InterlockedExchange (&m_bSharedLocked, TRUE );
52
+ }
53
+ else
54
+ {
55
+ success = TryAcquireSRWLockExclusive (&m_lock);
56
+ InterlockedExchange (&m_bExclusiveLocked, TRUE );
57
+ }
58
+ return (bool )success;
59
+ }
60
+
45
61
void SRWLock::lock (bool bShared)
46
62
{
47
63
if (bShared)
You can’t perform that action at this time.
0 commit comments