📄 mutex.h
字号:
/*-----------------------------------------------------------------------------
* FILE: Mutex.h
* AUTH: xuwannian@gmail.com
* TIME: 2008-04-24
*
* Windows环境下的Mutex,在应用锁处创建全局锁mutex调用lock类创建锁应用
* 使用lock类的构造函数锁住共享变量或共享资源或调用wait方法等待一定时间
* 调用wait方法返回值如果不为:WAIT_OBJECT_0则表示等待锁失败,无法处理
* 锁定的资源
*
* 当调用wait函数时,如果指定的时间为-1则表示永久等待直到等到锁资源或异常
* 在调用锁时请必要时加上try-catch捕获异常信息
*-----------------------------------------------------------------------------
* 如:
* void funct()
* {
* lock l(__m);
* do something....;
*
* or----------------------------------------------------------------------
* lock l(__m, 1000)
* DWORD dwRet = l.wait()
*
* if (WAIT_OBJECT_0 == dwRet)
* {
* // 处理共享资源
* }
* }
*---------------------------------------------------------------------------*/
#ifndef __MUTEX_H__
#define __MUTEX_H__
#ifdef _WIN32
#include <Windows.h>
#include <process.h>
#endif
namespace xuwn
{
//////////////////////////////////////////////////////////////////////////
class mutex;
class lock;
class mutex
{
friend class lock;
public:
mutex()
{ __mutex = ::CreateMutex(NULL, FALSE, NULL); };
virtual ~mutex()
{ ::CloseHandle(__mutex); };
protected:
void lock()
{ ::WaitForSingleObject(__mutex, INFINITE); };
void unlock ()
{ ::ReleaseMutex(__mutex); };
DWORD wait(DWORD dwtime)
{ return ::WaitForSingleObject(__mutex, dwtime); }
private:
HANDLE __mutex;
}; // END class mutex
class lock
{
public:
lock(mutex& m__) : __m(m__)
{ __m.lock(); };
lock(mutex& m__, DWORD t__) : __m(m__), __t(t__)
{}
DWORD wait()
{ return __m.wait(__t); }
virtual ~lock()
{ __m.unlock(); };
private:
mutex& __m;
DWORD __t;
}; // END class lock
///////////////////////////////////////////////////////////////////////////////
// 与线程相关的函数
typedef void (__cdecl *thrdfun)(void*);
template<typename T>
class ARGS
{
public:
ARGS(void* h__) : __h(h__){}
public:
T __t;
void* __h;
};
class thread
{
public:
thread(thrdfun func, LPVOID lpParams)
{ __hwnd = (HANDLE)_beginthread(func, 0, (LPVOID)lpParams); }
~thread()
{ _endthread(); }
void join()
{
if (__hwnd) ::WaitForSingleObject(__hwnd, INFINITE);
}
public:
HANDLE __hwnd;
};
//////////////////////////////////////////////////////////////////////////
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -