在很多时候,我们的程序,在执行下一步操作之前,需要等待上一步的执行完成,这种延时等待的方式在异步操作,或者是利用消息循环机制通信的程序中,最为体现的明显。 举个API的例子:
上面的例子,是个很典型的延时应用。 说到延时,大家可能第一反应,就是 Sleep 。 先不谈 Sleep 延时的精度如何,Sleep 的一个致命的弱点,就是 Sleep 的过程中,进程是不能响应外部操作的,变成了假死状态,这样的话,一个是用户体验很差,再者,用户想中途终止也不行,只能干等,或者强制 KILL 掉程序。 所以,此时的Sleep是不可取的。 我们需要的,是一个可以继续响应操作,而且精度高的延时函数。 下面,我们自己实现一个: using System.Runtime.InteropServices;
[DllImport("kernel32.dll")] static extern uint GetTickCount(); static void Delay(uint ms) { uint start = GetTickCount(); while (GetTickCount() - start < ms) { Application.DoEvents(); } } |
|