mirror of https://github.com/qt/qtdatavis3d.git
164 lines
4.1 KiB
C++
164 lines
4.1 KiB
C++
/****************************************************************************
|
|
* *
|
|
* 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__
|