sh_lock.h

来自「rsa算法打的一个包」· C头文件 代码 · 共 59 行

H
59
字号
// 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 + =
减小字号Ctrl + -
显示快捷键?