public void Stop() { lock (stateLock) { Enabled = false; var timeSpec = new TimerSpec { interval = new TimeSpec { sec = 0, nsec = 0 } }; var setErr = TimerSetTime(timerID, TimerFlag.Default, ref timeSpec, IntPtr.Zero); if (setErr != ERRNO.NONE) { Log.Write("LinuxTimer", $"Failed deactivating the timer: ${(ERRNO)Marshal.GetLastWin32Error()}", LogLevel.Error); } var delErr = TimerDelete(timerID); if (delErr != ERRNO.NONE) { Log.Write("LinuxTimer", $"Failed deleting the timer: ${(ERRNO)Marshal.GetLastWin32Error()}", LogLevel.Error); } } }
public unsafe void Start() { lock (stateLock) { if (!Enabled) { sigEvent = new SigEvent { notify = SigEv.Thread, thread = new SigEvThread { function = Marshal.GetFunctionPointerForDelegate(callbackDelegate), attribute = IntPtr.Zero }, value = new SigVal() }; var createErr = TimerCreate(ClockID.Monotonic, ref sigEvent, out timerID); if (createErr != ERRNO.NONE) { Log.Write("LinuxTimer", $"Failed creating timer: {(ERRNO)Marshal.GetLastWin32Error()}", LogLevel.Error); } double interval = Interval * 1000 * 1000; timeSpec = new TimerSpec { interval = new TimeSpec { sec = 0, nsec = (long)interval }, value = new TimeSpec { sec = 0, nsec = 100 } }; var oldTimeSpec = new TimerSpec(); var setErr = TimerSetTime(timerID, TimerFlag.Default, ref timeSpec, ref oldTimeSpec); if (setErr != ERRNO.NONE) { Log.Write("LinuxTimer", $"Failed activating the timer: ${(ERRNO)Marshal.GetLastWin32Error()}", LogLevel.Error); } Enabled = true; } } }
public static extern ERRNO TimerSetTime(IntPtr timerID, TimerFlag flags, ref TimerSpec newValue, IntPtr oldValue);