#ifndef _VNXPLAT_EVENT_H_ #define _VNXPLAT_EVENT_H_ #include "nocopy.h" #include "int.h" #include "export.h" namespace vn { namespace xplat { /// \brief Represents a cross-platform event. class vn_proglib_DLLEXPORT Event : private util::NoCopy { public: /// \brief Available wait results. enum WaitResult { WAIT_SIGNALED, ///< The event was signalled. WAIT_TIMEDOUT ///< Timed out while waiting for the event to signal. }; // Constructors /////////////////////////////////////////////////////////// public: /// \brief Creates a new event. Event(); ~Event(); // Public Methods ///////////////////////////////////////////////////////// public: /// \brief Waits for a signal on this event. /// /// This method will wait indefinitely for the event. void wait(); /// \brief Waits for a signal on this event for the specified amount of /// time. /// /// \param[in] timeoutUs The amount of time to wait in microseconds. /// \return The result of the wait operation. WaitResult waitUs(uint32_t timeoutUs); /// \brief Waits for a signal on this event for the specified amount of /// time. /// /// \param[in] timeoutMs The amount of time to wait in milliseconds. /// \return The result of the wait operation. WaitResult waitMs(uint32_t timeoutMs); /// \brief Signals the event. void signal(); // Private Members //////////////////////////////////////////////////////// private: // Contains internal data, mainly stuff that is required for cross-platform // support. struct Impl; Impl *_pi; }; } } #endif