Esempio n. 1
0
 public unsafe void Start()
 {
     lock (stateLock)
     {
         if (!Enabled)
         {
             if (IsSupportedNatively(Interval))
             {
                 var caps = new TimeCaps();
                 _ = timeGetDevCaps(ref caps, (uint)sizeof(TimeCaps));
                 var clampedInterval = Math.Clamp((uint)Interval, caps.wPeriodMin, caps.wPeriodMax);
                 _       = timeBeginPeriod(clampedInterval);
                 timerId = timeSetEvent(clampedInterval, 1, callbackDelegate, IntPtr.Zero, EventType.TIME_PERIODIC | EventType.TIME_KILL_SYNCHRONOUS);
                 Enabled = true;
             }
             else
             {
                 Log.Write("Timer", "Unsupported interval detected, will use fallback timer. Expect high CPU usage", LogLevel.Warning);
                 fallbackTimer = new FallbackTimer
                 {
                     Interval = Interval
                 };
                 fallbackTimer.Elapsed += () => Elapsed?.Invoke();
                 fallbackTimer.Start();
                 Enabled = true;
             }
         }
     }
 }
Esempio n. 2
0
 public void Stop()
 {
     lock (stateLock)
     {
         if (Enabled)
         {
             if (fallbackTimer == null)
             {
                 _ = timeKillEvent(timerId);
                 _ = timeEndPeriod((uint)Interval);
             }
             else
             {
                 fallbackTimer.Stop();
                 fallbackTimer = null;
             }
             Enabled = false;
         }
     }
 }