| 1234567891011121314151617181920212223242526272829303132333435363738 |
- using System;
- namespace Ryujinx.Common.PreciseSleep
- {
- /// <summary>
- /// An event which works similarly to an AutoResetEvent, but is backed by a
- /// more precise timer that allows waits of less than a millisecond.
- /// </summary>
- public interface IPreciseSleepEvent : IDisposable
- {
- /// <summary>
- /// Adjust a timepoint to better fit the host clock.
- /// When no adjustment is made, the input timepoint will be returned.
- /// </summary>
- /// <param name="timePoint">Timepoint to adjust</param>
- /// <param name="timeoutNs">Requested timeout in nanoseconds</param>
- /// <returns>Adjusted timepoint</returns>
- long AdjustTimePoint(long timePoint, long timeoutNs);
- /// <summary>
- /// Sleep until a timepoint, or a signal is received.
- /// Given no signal, may wake considerably before, or slightly after the timeout.
- /// </summary>
- /// <param name="timePoint">Timepoint to sleep until</param>
- /// <returns>True if signalled or waited, false if a wait could not be performed</returns>
- bool SleepUntil(long timePoint);
- /// <summary>
- /// Sleep until a signal is received.
- /// </summary>
- void Sleep();
- /// <summary>
- /// Signal the event, waking any sleeping thread or the next attempted sleep.
- /// </summary>
- void Signal();
- }
- }
|