📄 sh_lock.h
字号:
// SH_Lock.h: interface for the SH_Lock class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SH_LOCK_H__5CEB3BFD_37CD_45BB_8B60_E480FF34A3AE__INCLUDED_)
#define AFX_SH_LOCK_H__5CEB3BFD_37CD_45BB_8B60_E480FF34A3AE__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "SH_Object.h"
class AFX_EXT_CLASS SH_Lock : public SH_Object
{
public:
SH_Lock();
SH_Lock(LPCTSTR cszName);
virtual ~SH_Lock();
LPCTSTR GetName(VOID);
BOOL Create();
BOOL Create(LPCTSTR cszName);
BOOL Lock(DWORD dwTimeout=INFINITE);
BOOL UnLock();
static const CRITICAL_SECTION Initialize();
protected:
VOID SetName(LPCTSTR cszName);
VOID Close();
private:
CString m_strName;
HANDLE m_hMutex;
};
/**
*
*eg.SH_LOCK/SH_UNLOCK utils for thread
*
*SH_List<int> my_list;
*SH_LOCK_DEFINE(my_list);
*
*...
*SH_LOCK(my_list);
*my_list.Function();
*SH_UNLOCK(my_list);
*...
*
**/
#define SH_LOCK_NAME(name) SH__##name##_LOCK
#define SH_LOCK_DEFINE(name) CRITICAL_SECTION SH_LOCK_NAME(name) = SH_Lock::Initialize()
#define SH_LOCK_DEFINE_STATIC(name) static SH_LOCK_DEFINE(name)
#define SH_LOCK(name) EnterCriticalSection((LPCRITICAL_SECTION)&SH_LOCK_NAME(name))
#define SH_UNLOCK(name) LeaveCriticalSection((LPCRITICAL_SECTION)&SH_LOCK_NAME(name))
#endif // !defined(AFX_SH_LOCK_H__5CEB3BFD_37CD_45BB_8B60_E480FF34A3AE__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -