Exemple #1
0
 private static extern uint timeSetEvent(
     uint uDelay,
     uint uResolution,
     [MarshalAs(UnmanagedType.FunctionPtr)] MmTimerProc lpTimeProc,
     uint dwUser,
     int fuEvent
     );
Exemple #2
0
            public static uint SetTimer(int delay, int resolution, MmTimerProc callback, int user, int eventType)
            {
                Thread schedulerThread = new Thread(() => ScheduleThread(delay, callback, (TimerEventType)eventType));

                SchedulerCatalog.Add(schedulerThread);
                schedulerThread.Start();
                return((uint)SchedulerCatalog.IndexOf(schedulerThread));
            }
Exemple #3
0
            private static void ScheduleThread(int fireTime, MmTimerProc callback, TimerEventType schedulerType)
            {
                try
                {
                    Stopwatch sw = new Stopwatch();
repeatSchedule:
                    sw.Start();
                    while (sw.ElapsedMilliseconds < fireTime)
                    {
                        Thread.Sleep(1);
                    }
                    sw.Reset();
                    callback((uint)SchedulerCatalog.IndexOf(Thread.CurrentThread), 0, IntPtr.Zero, 0, 0);
                    if (schedulerType == TimerEventType.TIME_PERIODIC)
                    {
                        goto repeatSchedule;
                    }
                }
                catch (ThreadInterruptedException e)
                {
                    Console.WriteLine($"Thread interrupted (callback={callback.Method.Name}())");
                }
            }
Exemple #4
0
 public WinMmTimer(int frequency)
 {
     _callback  = (timerid, msg, user, dw1, dw2) => Tick?.Invoke(null, EventArgs.Empty);
     _frequency = frequency;
 }
Exemple #5
0
 public NativeTimer(MmTimerProc callback, int frequency)
 {
     _callback  = callback;
     _frequency = frequency;
 }