C# 关于两个延时函数

今天在一个线程内用到延时函数,一开始使用了System.Threading.Thread.Sleep(100);但是线程的切换出现了问题,直接跳过了前面的两行代码,特从网上找了两个函数

原文连接:https://blog.csdn.net/qq_31094099/article/details/80461035

 

在线程中如果需要延时,尽量不要使用Sleep()函数,这样会导致时间片切到别的线程中。

使用如下函数: 

//Delay function
public static void Delay(int milliSecond)
{
int start = Environment.TickCount;
while (Math.Abs(Environment.TickCount - start) < milliSecond)
{
Application.DoEvents();
      }
}
或者:

        //Delay us   Create a waitable timer
        [DllImport("kernel32.dll")]
        public static extern int CreateWaitableTimer(int lpTimerAttributes,
bool bManualReset, int lpTimerName);

        public static void UsDelay(int us)
        {
            long duetime = -10 * us;
            int hWaitTimer = CreateWaitableTimer(NULL, true, NULL);
            SetWaitableTimer(hWaitTimer, ref duetime, 0, NULL, NULL, false);
            while (MsgWaitForMultipleObjects(1, ref hWaitTimer, false, Timeout.Infinite,
QS_TIMER)) ;
            CloseHandle(hWaitTimer);
        }
————————————————
版权声明:本文为CSDN博主「海歌也疯狂」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_31094099/article/details/80461035

posted on 2020-01-13 09:06  恋依0  阅读(414)  评论(0)    收藏  举报