Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
        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;
                }
            }
        }
Esempio n. 3
0
 public static extern ERRNO TimerSetTime(IntPtr timerID, TimerFlag flags, ref TimerSpec newValue, IntPtr oldValue);