#pragma once

//! @file Mix/Event.h
//! @brief イベントクラスインクルードファイル

#include "Mix/Noncopyable.h"

namespace Mix{

	//! @class Event
	//! @brief イベントクラス
	class _MIX_DLL_API Event : public Mix::Noncopyable
	{
	protected:
		HANDLE m_hEvent;	///< イベントハンドル

	public:
		//! @brief コンストラクタ
		//! @param[in] bManual 手動で非シグナル状態にする場合は True
		//! @param[in] bSignal 初期状態をシグナルにする場合は True
		Event( Boolean bManual = False, Boolean bSignal = False );
		//! @brief デストラクタ
		virtual ~Event( void );

		//! @brief シグナル状態にします
		void Set( void );
		//! @brief 非シグナル状態にします
		void Reset( void );

		//! @brief シグナル状態になるまで待機
		//! @param[in] timeOut タイムアウト時間( 1000ms 単位 )\n
		//! 0 : 即座に制御を返す\n
		//! INFINITE : 無限に待つ
		//! @return シグナル状態の場合は True を返します
		Boolean Wait( UInt32 timeOut = INFINITE ) const;

		//! @brief ハンドルを取得します
		//! @return ハンドルを返します
		HANDLE GetHandle( void ) const;
	};

}
