C# 延时函数 非Sleep
1.示例:
using System.Runtime.InteropServices;
[DllImport("kernel32.dll")] static extern uint GetTickCount();
static void Delay(uint ms) {
uint start = GetTickCount();
while (GetTickCount() - start < ms) {
System.Windows.Forms.Application.DoEvents();
}
}
2.使用说明:
在很多时候,我们的程序,在执行下一步操作之前,需要等待上一步的执行完成,这种延时等待的方式在异步操作,或者是利用消息循环机制通信的程序中,最为体现的明显。
3.应用场景:
举个API的例子:
我们自己的程序是A,需要利用API结合Windows 消息机制,控制外部程序B;
A向B发送一个消息,B去执行,此时A需要等待B执行完后,根据B的执行结果,再次向B发送下一个消息
上面的例子,是个很典型的延时应用。
说到延时,大家可能第一反应,就是 Sleep 。
先不谈 Sleep 延时的精度如何,Sleep 的一个致命的弱点,就是 Sleep 的过程中,进程是不能响应外部操作的,变成了假死状态,这样的话,一个是用户体验很差,再者,用户想中途终止也不行,只能干等,或者强制 KILL 掉程序。
所以,此时的Sleep是不可取的。 我们需要的,是一个可以继续响应操作,而且精度高的延时函数。
就可以使用上面的示例了。
参:suzilong11的专栏 C# 延时函数 非Sleep
C# 延时函数 非Sleep的更多相关文章
- C# 非独占延时函数 非Sleep
在C#窗口程序中,如果在主线程里调用Sleep,在Sleep完成之前, 界面呈现出假死状态,不能响应任何操作! 下边实现的是非独占性延时函数,延时过时中界面仍可响应消息: public static ...
- QT 延时函数设置
QT 的延时函数分为非阻塞延时 和 阻塞型延时 非阻塞延时: void GreenPass3::delaymsec(int msec){ QTime dieTime = QTime::curre ...
- 5-3 Linux内核计时、延时函数与内核定时器【转】
转自:http://www.xuebuyuan.com/510594.html 5-3 Linux内核计时.延时函数与内核定时器 计时 1. 内核时钟 1.1 内核通过定时器(timer)中断来跟 ...
- Android 如何通过代码模拟按钮点击 延时函数
View.performClick(); 比如: private Button mButton01; mButton01 = (Button)findViewById(R.id.myButt ...
- 延时函数出错,volatile一例
莫名其妙的错误.使用Systick做的延时. 初始化是这样的: //SysTick配置 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); if ...
- JavaScript的sleep延时函数
JavaScript没有像Java的sleep延时函数,所以记录JavaScript的sleep延时函数 function sleep(milliSeconds) { var startTime = ...
- Qt自定义sleep延时函数(巧妙的使用时间差,但这样似乎CPU满格,而不是沉睡)
Qt不像VC++的win32/MFC编程那样,提供了现成的sleep函数可供调用.Qt把sleep函数封装在QThread类中.子线程可以调用sleep函数.但是如果用户想在主线程实现延时功能,该怎么 ...
- 改进的延时函数Delay(使用MsgWaitForMultipleObjects等待消息或超时的到来)
解决上一节中延时函数占CPU使用率(达50%)的第二种方法是利用消息机制,通过API函数MsgWaitForMultipleObjects等待消息或超时的到来,从而避免使用循环检测使CPU占用率过高. ...
- stm32中的延时函数
//粗延时函数,微秒 void delay_nus(u16 time) { u16 i=0; while(time--) { i=10; //自己定义 while(i--) ; } } //毫秒级的 ...
随机推荐
- glibc的几个有用的处理二进制位的内置函数(转)
— Built-in Function: int __builtin_ffs (unsigned int x) Returns one plus the index of the least sign ...
- 【Android开发经验】Cannot generate texture from bitmap异常的解决方式
异常现象: 今天在处理用户头像的过程中,由于头像的处理比較复杂,由于,没有使用afinal自带的自己主动载入.而是自己依据头像的下载路径.手动进行下载和使用.可是在手动回收bitmap对象的过程中,会 ...
- Android仿掌上英雄联盟首页,实现折叠效果
概述 仿掌上英雄联盟首页的demo 详细 代码下载:http://www.demodashi.com/demo/10695.html 首页大概分为几个部分 状态栏 标题栏 轮播图 切换的Tab 资讯列 ...
- WeUI 是由微信官方设计团队专为微信移动 Web 应用设计的 UI 库
WeUI 是由微信官方设计团队专为微信移动 Web 应用设计的 UI 库. WeUI 是一套同微信原生视觉体验一致的基础样式库,为微信 Web 开发量身设计,可以令用户的使用感知更加统一.包含butt ...
- PHP递归目录的5种方法
<?php //方法一:使用glob循环 function myscandir1($path, &$arr) { foreach (glob($path) as $file) { if ...
- 【LeetCode】88. Merge Sorted Array (2 solutions)
Merge Sorted Array Given two sorted integer arrays A and B, merge B into A as one sorted array. Note ...
- WordPress网站搬家经验总结
http://cnzhx.net/blog/move-wordpress-site-step-by-step/也许很多人都有跟我类似的经历:因为某种原因需要将自己的WordPress站点从一个空间转移 ...
- HDU 3666 THE MATRIX PROBLEM (差分约束 深搜 & 广搜)
THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- Android开发学习之Activity的简介
1.Activity的概念介绍 Activity是Android组件中最基本也是最常用的一种组件,在一个Android应用中,一个Activity通常就是一个单独的屏幕.每一个Activity都被实现 ...
- Spring3 MVC请求参数获取的几种方法[转]
Spring3 MVC请求参数获取的几种方法 Spring3 MVC请求参数获取的几种方法 一. 通过@PathVariabl获取路径中的参数 @RequestMapping(value=& ...