XnOSCpp.h
Go to the documentation of this file.
/****************************************************************************
* *
* OpenNI 1.x Alpha *
* Copyright (C) 2011 PrimeSense Ltd. *
* *
* This file is part of OpenNI. *
* *
* OpenNI is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as published *
* by the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* OpenNI is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
* *
****************************************************************************/
#ifndef __XN_OS_CPP_H__
#define __XN_OS_CPP_H__
//---------------------------------------------------------------------------
// Includes
//---------------------------------------------------------------------------
#include <XnOS.h>
//---------------------------------------------------------------------------
// Types
//---------------------------------------------------------------------------
class XnAutoCSLocker
{
public:
inline XnAutoCSLocker(const XnAutoCSLocker& other) : m_hCS(other.m_hCS), m_bLocked(FALSE)
{
Lock();
}
inline XnAutoCSLocker& operator=(const XnAutoCSLocker& other)
{
Unlock();
m_hCS = other.m_hCS;
Lock();
return *this;
}
inline XnAutoCSLocker(XN_CRITICAL_SECTION_HANDLE hCS) : m_hCS(hCS), m_bLocked(FALSE)
{
Lock();
}
inline ~XnAutoCSLocker()
{
Unlock();
}
inline void Lock()
{
if (!m_bLocked)
{
xnOSEnterCriticalSection(&m_hCS);
m_bLocked = TRUE;
}
}
inline void Unlock()
{
if (m_bLocked)
{
xnOSLeaveCriticalSection(&m_hCS);
m_bLocked = FALSE;
}
}
private:
XN_CRITICAL_SECTION_HANDLE m_hCS;
XnBool m_bLocked;
};
class XnAutoMutexLocker
{
public:
inline XnAutoMutexLocker(XN_MUTEX_HANDLE hMutex, XnUInt32 nMilliseconds) : m_hMutex(hMutex)
{
m_nStatus = xnOSLockMutex(m_hMutex, nMilliseconds);
}
XnStatus GetStatus() const
{
return m_nStatus;
}
inline ~XnAutoMutexLocker()
{
if (m_nStatus == XN_STATUS_OK)
{
//Only unlock if we managed to lock in the first place
xnOSUnLockMutex(m_hMutex);
}
}
private:
XN_MUTEX_HANDLE m_hMutex;
XnStatus m_nStatus;
};
class XnOSEvent
{
public:
XnOSEvent() : m_hEvent(NULL) {}
~XnOSEvent()
{
Close();
}
operator XN_EVENT_HANDLE() const
{
return m_hEvent;
}
XnStatus Create(XnBool bManualReset)
{
return xnOSCreateEvent(&m_hEvent, bManualReset);
}
XnStatus Create(const XnChar* strName, XnBool bManualReset, XnBool bAllowOtherUsers = FALSE)
{
return xnOSCreateNamedEventEx(&m_hEvent, strName, bManualReset, bAllowOtherUsers);
}
XnStatus Open(const XnChar* strName, XnBool bEnableOtherUsers = FALSE)
{
return xnOSOpenNamedEventEx(&m_hEvent, strName, bEnableOtherUsers);
}
XnStatus Close()
{
return (m_hEvent != NULL) ? xnOSCloseEvent(&m_hEvent) : XN_STATUS_OK;
}
XnStatus Set()
{
return xnOSSetEvent(m_hEvent);
}
XnStatus Reset()
{
return xnOSResetEvent(m_hEvent);
}
XnStatus Wait(XnUInt32 nMilliseconds)
{
return xnOSWaitEvent(m_hEvent, nMilliseconds);
}
private:
XN_EVENT_HANDLE m_hEvent;
};
#endif // __XN_OS_CPP_H__
XnOS.h
xnOSResetEvent
XN_C_API XnStatus XN_C_DECL xnOSResetEvent(const XN_EVENT_HANDLE EventHandle)
xnOSCreateNamedEventEx
XN_C_API XnStatus XN_C_DECL xnOSCreateNamedEventEx(XN_EVENT_HANDLE *pEventHandle, const XnChar *cpEventName, XnBool bManualReset, XnBool bAllowOtherUsers)
xnOSEnterCriticalSection
XN_C_API XnStatus XN_C_DECL xnOSEnterCriticalSection(XN_CRITICAL_SECTION_HANDLE *pCriticalSectionHandle)
xnOSWaitEvent
XN_C_API XnStatus XN_C_DECL xnOSWaitEvent(const XN_EVENT_HANDLE EventHandle, XnUInt32 nMilliseconds)
xnOSCloseEvent
XN_C_API XnStatus XN_C_DECL xnOSCloseEvent(XN_EVENT_HANDLE *pEventHandle)
xnOSSetEvent
XN_C_API XnStatus XN_C_DECL xnOSSetEvent(const XN_EVENT_HANDLE EventHandle)
xnOSLeaveCriticalSection
XN_C_API XnStatus XN_C_DECL xnOSLeaveCriticalSection(XN_CRITICAL_SECTION_HANDLE *pCriticalSectionHandle)
xnOSCreateEvent
XN_C_API XnStatus XN_C_DECL xnOSCreateEvent(XN_EVENT_HANDLE *pEventHandle, XnBool bManualReset)
xnOSOpenNamedEventEx
XN_C_API XnStatus XN_C_DECL xnOSOpenNamedEventEx(XN_EVENT_HANDLE *pEventHandle, const XnChar *cpEventName, XnBool bAllowOtherUsers)
xnOSUnLockMutex
XN_C_API XnStatus XN_C_DECL xnOSUnLockMutex(const XN_MUTEX_HANDLE MutexHandle)
xnOSLockMutex
XN_C_API XnStatus XN_C_DECL xnOSLockMutex(const XN_MUTEX_HANDLE MutexHandle, XnUInt32 nMilliseconds)
TRUE
#define TRUE
Definition XnPlatform.h:96
FALSE
#define FALSE
Definition XnPlatform.h:100
XnStatus
XnUInt32 XnStatus
Definition XnStatus.h:34
XN_STATUS_OK
#define XN_STATUS_OK
Definition XnStatus.h:37
XnAutoCSLocker::operator=
XnAutoCSLocker & operator=(const XnAutoCSLocker &other)
Definition XnOSCpp.h:41
XnAutoCSLocker::Lock
void Lock()
Definition XnOSCpp.h:59
XnAutoCSLocker::XnAutoCSLocker
XnAutoCSLocker(XN_CRITICAL_SECTION_HANDLE hCS)
Definition XnOSCpp.h:49
XnAutoCSLocker::XnAutoCSLocker
XnAutoCSLocker(const XnAutoCSLocker &other)
Definition XnOSCpp.h:36
XnAutoCSLocker::Unlock
void Unlock()
Definition XnOSCpp.h:68
XnAutoCSLocker::~XnAutoCSLocker
~XnAutoCSLocker()
Definition XnOSCpp.h:54
XnAutoMutexLocker::~XnAutoMutexLocker
~XnAutoMutexLocker()
Definition XnOSCpp.h:95
XnAutoMutexLocker::XnAutoMutexLocker
XnAutoMutexLocker(XN_MUTEX_HANDLE hMutex, XnUInt32 nMilliseconds)
Definition XnOSCpp.h:85
XnAutoMutexLocker::GetStatus
XnStatus GetStatus() const
Definition XnOSCpp.h:90
XnOSEvent::Reset
XnStatus Reset()
Definition XnOSCpp.h:149
XnOSEvent::Wait
XnStatus Wait(XnUInt32 nMilliseconds)
Definition XnOSCpp.h:154
XnOSEvent::Close
XnStatus Close()
Definition XnOSCpp.h:139
XnOSEvent::~XnOSEvent
~XnOSEvent()
Definition XnOSCpp.h:114
XnOSEvent::XnOSEvent
XnOSEvent()
Definition XnOSCpp.h:112
XnOSEvent::Create
XnStatus Create(const XnChar *strName, XnBool bManualReset, XnBool bAllowOtherUsers=FALSE)
Definition XnOSCpp.h:129
XnOSEvent::Create
XnStatus Create(XnBool bManualReset)
Definition XnOSCpp.h:124
XnOSEvent::Set
XnStatus Set()
Definition XnOSCpp.h:144
XnOSEvent::Open
XnStatus Open(const XnChar *strName, XnBool bEnableOtherUsers=FALSE)
Definition XnOSCpp.h:134