#ifndef _QMUTEX #define _QMUTEX enum MutexType { TYPE_UINT, TYPE_BYTE, TYPE_PUINT }; template <typename T> class QMutex { private: BYTE *m_pBuffer; char m_szMutex[256]; T m_Ttemp; queue<T> m_qe_Msg; HANDLE m_hMutex; public: UINT m_uiClassType;//1 queue public: QMutex(UINT ui_temp=0,UINT size=0) { m_uiClassType=ui_temp; sprintf(m_szMutex,"%d",g_ui_mutex); m_hMutex=CreateMutex(NULL,FALSE,m_szMutex); g_ui_mutex++; if (ui_temp==2) { m_pBuffer=new BYTE[size]; } } T operator =(QMutex temp)//取值 { return temp; } void operator =(T Ttemp )//赋值 { this->SetValue(Ttemp); } void SetBuffer(BYTE *p,UINT size) { if (m_uiClassType != 2) { return 0; } T T_temp; WaitForSingleObject(m_hMutex,INFINITE); memcpy(m_pBuffer,p,size); ReleaseMutex(m_hMutex); } void GetBuffer(BYTE *p,UINT size) { if (m_uiClassType != 2) { return 0; } T T_temp; WaitForSingleObject(m_hMutex,INFINITE); memcpy(p,m_pBuffer,size); ReleaseMutex(m_hMutex); } T GetValue() { if (m_uiClassType != 0) { return 0; } T T_temp; WaitForSingleObject(m_hMutex,INFINITE); T_temp=m_Ttemp; ReleaseMutex(m_hMutex); return T_temp; } void SetValue(T Ttemp) { if (m_uiClassType != 0) { return; } WaitForSingleObject(m_hMutex,INFINITE); m_Ttemp=Ttemp; ReleaseMutex(m_hMutex); } ~QMutex() { CloseHandle(m_hMutex); if (m_uiClassType==2) { delete m_pBuffer; } } }; #endif