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

Low risk, high reward: the asymmetric black swan trade

Cornwall Capital was founded in 2003 by two young people who were not in the mainstream - Charlie Ledley, and Gammy Mak. I say they were out of the mainstream because they were not financial professionals from a scientific background, but they were full of imagination, and a keen insight into the market. Their insight is evident in the transactions of First Capital Financial. Case Background Before betting that the subprime mortgage market would collapse, Cornwall Capital first noticed a credit card business company, First Capital Financial. Throughout the 1990s and early 2000s, First Capital Financial claimed that it had better tools than other firms for analyzing the creditworthiness of subprime credit card users and pricing the risk of lending to them, and the market bought that claim. But in July 2002, First Capital Financial's stock fell 60% in two days after the company voluntarily disclosed a disagreement between them and two government regulators: How much capital did they ...

盘点类似河北的儿童杀人案,是如何判决的

clear元素清除浮动float

 clear元素用来清除左边或者右边或者两边的浮动元素(float) 比如: <!DOCTYPE html> <html> <head> <meta charset="utf-8">  <title>菜鸟教程(runoob.com)</title>  <style> img { float:left; border:1px solid red; } p.clear { clear:both; } </style> </head> <body> <img src="logocss.gif" width="95" height="84" /> <p>This is some text. This is some text. This is some text. This is some text. This is some text. This is some text.</p> <p class="clear">This is also some text. This is also some text. This is also some text. This is also some text. This is also some text. This is also some text.</p> </body> </html> 第一段p没有指定clear,因此左边会有图片,而第二段class是clear,clear: both,清除了两边的浮动元素,左右都不会出现浮动元素,所以它自己占单独的行,不和其他浮动元素占一行。