Skip to main content

A better sleep method than Thread.Sleep in C sharp

Sleep.CS:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace TimerNoCpuConsume
{
    class Timer
    {
        public delegate void TimerCompleteDelegate();

        [DllImport("kernel32.dll")]
        static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes, bool bManualReset, string lpTimerName);

        [DllImport("kernel32.dll")]
        static extern bool SetWaitableTimer(IntPtr hTimer, [In] ref long ft, int lPeriod, TimerCompleteDelegate pfnCompletionRoutine, IntPtr pArgToCompletionRoutine, bool fResume);

        [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Auto)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool CloseHandle(IntPtr hObject);

        [DllImport("User32.dll")]
        static extern int MsgWaitForMultipleObjects(int nCount, ref IntPtr handle, bool fWaitAll, int dwMilliseconds, int dwWakeMask);


        /// <summary>
        /// No occupation of cpu, the window does not get stuck, does not affect other code execution
        /// </summary>
        /// <param name="time">mill seconds</param>
        public static bool Sleep(int time)
        {
            TimerCompleteDelegate TimerComplete = new TimerCompleteDelegate(TimerCompleted);
            long Interval = -10 * time * 1000;//占8字节
            //Create of the timer
            IntPtr handle = CreateWaitableTimer(IntPtr.Zero, true, "WaitableTimer");
            SetWaitableTimer(handle, ref Interval, 0, TimerComplete, IntPtr.Zero, true);
            //wait for message
           
            while (MsgWaitForMultipleObjects(1, ref handle, false, -1, 255) != 0)
            {
                
                Application.DoEvents();
            }
            return CloseHandle(handle);
        }
        private static void TimerCompleted()
        {
            // Once the timer expires, the routine is executed. This is performed by a program implemented independently of the class that called the OnTimeRebug event.
        }

    }
}


Calling the method:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace TimerNoCpuConsume
{
    class Program
    {
        static void Main(string[] args)
        {            
            Timer.Sleep(30000);
            Console.WriteLine("Done!");
            Console.Read();
        }
    }
}

Comments

Popular posts from this blog

span[class~="sr-only"]

  The  span[class~="sr-only"]  selector will select any  span  element whose  class   includes   sr-only . Create that selector, and give it a  border  property set to  0 . span [ class ~= "sr-only" ] {    border:   0 ; }

Simmons Will not use the three-pointer as a conventional weapon, it is difficult to shoot like Curry Soup.

Since entering the league, Ben Simmons's physical condition, athleticism, vision and off-season offense are top-notch, but only shots have been criticized. In the first two seasons of his career, Simmons made a total of 17 shots from three-pointers. In 0, when he is shooting on the outside, the opponent can make a "please" gesture at will. But even if he is not good at shooting, Simmons is still selected for the All-Star team last season. If he gets a shooting skill package? The prospects of Simmons are undoubtedly limitless. This summer, Simmons has been polishing his jumper under the guidance of trainer Chris Johnson. From some streaming videos, he can see that his three-point jumper has improved. In the preseason game against Guangzhou, Simmons hit the first three-pointer in his career, and in the subsequent game against the Hornets, he made a mid-range jumper. It seems that Simmons seems to have more confidence in his jump shot, and he is more willing to sho...

An Australian Pelican feast that lasted more than two decades

Why are you so focused? It turned out that the pelicans were all waiting to eat fish with their heads up, hahahaha! In the Central Coast area north of Sydney, there is a beautiful and famous town called The Entrance, which has the title of "Australian Pelican Capital". What makes a town so honored? The reason is these cute toucans. Every afternoon, the pelicans fly here from near and far, and there are no obstacles 365 days a year. As soon as 3:30, a staff member will push a large box full of fish to the small square where the pelicans gather, and the pelicans have long been eager to wait. This white-haired grandpa came to feed today. I saw the grandfather skillfully put on rubber gloves, while taking a fish out of the box and throwing it at the pelican, he interacted with the onlookers and introduced the knowledge of the pelican. The noise of the pelicans competing for the fish and the exclamation of the onlookers crowded into one, the atmosphere was warm. A clever pelican s...