105 lines
2.5 KiB
C
105 lines
2.5 KiB
C
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// Name: wx/msw/private/event.h
|
||
|
// Purpose: Simple Windows 'event object' wrapper.
|
||
|
// Author: Troelsk, Vadim Zeitlin
|
||
|
// Created: 2014-05-07
|
||
|
// Copyright: (c) 2014 wxWidgets team
|
||
|
// Licence: wxWindows licence
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#ifndef _WX_MSW_PRIVATE_EVENT_H_
|
||
|
#define _WX_MSW_PRIVATE_EVENT_H_
|
||
|
|
||
|
#include "wx/msw/private.h"
|
||
|
|
||
|
namespace wxWinAPI
|
||
|
{
|
||
|
|
||
|
class Event : public AutoHANDLE<0>
|
||
|
{
|
||
|
public:
|
||
|
enum Kind
|
||
|
{
|
||
|
ManualReset,
|
||
|
AutomaticReset
|
||
|
};
|
||
|
|
||
|
enum InitialState
|
||
|
{
|
||
|
Signaled,
|
||
|
Nonsignaled
|
||
|
};
|
||
|
|
||
|
Event()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
// Wrappers around {Create,Set,Reset}Event() Windows API functions, with
|
||
|
// the same semantics.
|
||
|
bool Create(Kind kind = AutomaticReset,
|
||
|
InitialState initialState = Nonsignaled,
|
||
|
const wxChar* name = NULL);
|
||
|
bool Set();
|
||
|
bool Reset();
|
||
|
|
||
|
private:
|
||
|
wxDECLARE_NO_COPY_CLASS(Event);
|
||
|
};
|
||
|
|
||
|
} // namespace wxWinAPI
|
||
|
|
||
|
// ----------------------------------------------------------------------------
|
||
|
// Implementations requiring windows.h; these are to moved out-of-line if
|
||
|
// this class is moved to a public header, or if [parts of] msw/private.h is
|
||
|
// changed to not depend on windows.h being included.
|
||
|
// ----------------------------------------------------------------------------
|
||
|
|
||
|
inline bool
|
||
|
wxWinAPI::Event::Create(wxWinAPI::Event::Kind kind,
|
||
|
wxWinAPI::Event::InitialState initialState,
|
||
|
const wxChar* name)
|
||
|
{
|
||
|
wxCHECK_MSG( !IsOk(), false, wxS("Event can't be created twice") );
|
||
|
|
||
|
WXHANDLE handle = ::CreateEvent(NULL,
|
||
|
kind == ManualReset,
|
||
|
initialState == Signaled,
|
||
|
name);
|
||
|
if ( !handle )
|
||
|
{
|
||
|
wxLogLastError(wxS("CreateEvent"));
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
m_handle = handle;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
inline bool wxWinAPI::Event::Set()
|
||
|
{
|
||
|
wxCHECK_MSG( m_handle, false, wxS("Event must be valid") );
|
||
|
|
||
|
if ( !::SetEvent(m_handle) )
|
||
|
{
|
||
|
wxLogLastError(wxS("SetEvent"));
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
inline bool wxWinAPI::Event::Reset()
|
||
|
{
|
||
|
wxCHECK_MSG( m_handle, false, wxS("Event must be valid") );
|
||
|
|
||
|
if ( !::ResetEvent(m_handle) )
|
||
|
{
|
||
|
wxLogLastError(wxS("ResetEvent"));
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
#endif // _WX_MSW_PRIVATE_EVENT_H_
|