1 / 12
文档名称:

关于各种延时.doc

格式:doc   大小:75KB   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

关于各种延时.doc

上传人:yixingmaoj 2017/2/21 文件大小:75 KB

下载得到文件列表

关于各种延时.doc

相关文档

文档介绍

文档介绍:关于各种延时在 Linux 中,如果是应用层下的一些应用,我们可以: 1)调用 unsigned int sleep(unsigned int second); 函数去定时,这个时候它是秒级的; 头文件为<> ; 2)调用 int usleep(useconds_t); 函数去定时,这个时候它是微秒级的;头文件为<> ; 3)调用高精度睡眠 int nanosleep(const struct timespec * rep, struct timespec *rem); 是一个相比标准 UNIX 的 sleep 调用具有更高高精度的版本。和普通的 sleep 调用计算整秒数不同, nanosleep 接受一个指向一个 struct timespec 对象的指针作为参数,它可以表示毫微秒( nanosecond ,十亿分之一秒)的时间。然而,了解 Linux 内核的工作细节后可知, nanosleep 所提供的真正精确度是 10毫秒——比 sleep 提供的要精确。这个附加的精确度非常有用,比如说,可以根为反复进行的任务设置更短的间隔。 struct timespec 由两部分构成: tv_sec 表示整秒数部分; tv_nsec 则表示毫微秒。 tv_nesc 的值必须小于 109 。 nanosleep 相比 sleep 具有另一个优点。与 sleep 相同, nanosleep 调用可以被信号中断,这是 errno 将被设置为 EINTR 而调用将返回-1。但是, nanosleep 的第二个参数,另一个指向 struct timespec 对象的指针,如果不为 NULL 则在这种情况下它将被写入剩余的时间(这就是所请求的睡眠时间和实际睡眠时间的差)。这使重新开始睡眠变的很容易。头文件<> 。以下是内核中的: (); mdelay(); ndelay(); 实现的原理本质上都是忙等待, ndelay 和 mdelay 都是通过 udelay 衍生出来的,我们使用这些函数的实现往往会碰到编译器的警告 implicit declaration of function 'udelay' ,这往往是由于头文件的使用不当造成的。在 include/asm-???/ 中定义了 udelay (),而在 include/linux/ 中定义了 mdelay 和 一般适用于一个比较小的 delay ,如果你填的数大于 2000 ,系统会认为你这个是一个错误的 delay 函数,因此如果需要 2ms 以上的 delay 需要使用 mdelay 函数。 delay 函数本质上都是忙等待,对于长时间的忙等待意味这无谓的耗费着 cpu 的资源,因此对于毫秒级的延时,内核提供了 msleep , ssleep 等函数, 这些函数将使得调用它的进程睡眠参数指定的时间。那么,在 Windows 中呢: 1)我们很快想到 Sleep() ;头文件<> 然后再 VC++ 中,找到了一篇不错的文章,转自这里,内容如下: 方法一: VC 中的 WM_TIMER 消息映射能进行简单的时间控制。首先调用函数 SetTimer() 设置定时间隔,如 SetTimer(0,200,NULL) 即为设置200m s的时间间隔。然后在应用程序中增加定时响应函数 OnTimer() ,并在该函数中添加响应的处理语句,用来完成到达定时时间的操作。这种定时方法非常简单,可以实现一定的定时功能,但其定时功能如同 Sleep() 函数的延时功能一样,精度非常低,最小计时精度仅为 30ms , CPU 占用低,且定时器消息在多任务操作系统中的优先级很低,不能得到及时响应,往往不能满足实时控制环境下的应用。只可以用来实现诸如位图的动态显示等对定时精度要求不高的情况。如示例工程中的 Timer1 。方法二: VC 中使用 sleep() 函数实现延时,它的单位是 ms ,如延时 2秒, 用 sleep(2000) 。精度非常低,最小计时精度仅为 30ms ,用 sleep 函数的不利处在于延时期间不能处理其他的消息,如果时间太长,就好象死机一样, CPU 占用率非常高,只能用于要求不高的延时程序中。如示例工程中的 Timer2 。方法三:利用 COleDateTime 类和 COleDateTimeSpan 类结合 WINDOWS 的消息处理过程来实现秒级延时。如示例工程中的 Timer3 和 Timer3_1 。以下是实现 2秒的延时代码: COleDateTime start_time = COleDateTime::GetCurrent

最近更新

2024年事业单位招聘考试广东省肇庆市职业能力.. 22页

2024年事业单位招聘考试安徽省宣城市职业能力.. 22页

2024年事业单位招聘考试甘肃省甘南藏族自治州.. 23页

2024年事业单位招聘考试江西省景德镇市职业能.. 23页

2024年事业单位招聘考试山东省德州市职业能力.. 23页

2024年事业单位招聘考试甘肃省兰州市职业能力.. 22页

2024年事业单位招聘考试江西省鹰潭市职业能力.. 22页

2024年事业单位招聘考试黑龙江省齐齐哈尔市职.. 21页

2024年事业单位招聘考试山西省大同市职业能力.. 24页

2024年事业单位招聘考试河北省邢台市职业能力.. 23页

2024年事业单位招聘考试河南省信阳市职业能力.. 21页

2024年事业单位招聘考试广东省揭阳市职业能力.. 23页

2024年事业单位招聘考试贵州省毕节地区职业能.. 24页

2024年事业单位招聘考试广东省汕头市职业能力.. 22页

2024年网络分析仪项目资金需求报告代可行性研.. 59页

2024年同位素分离装置项目资金需求报告代可行.. 63页

2024年天然提取物调味料项目资金筹措计划书代.. 83页

上海高档地产项目故事概念构建方案【房地产】.. 268页

国家中小学智慧教育平台推动家校共育 4页

食品安全国家标准 GB5009系列(2022-2023版,有.. 14页

牧童之歌二声部钢琴伴奏正谱合唱曲谱 2页

大学生化学师范专业职业生涯规划书 7页

农村地区卡车与无人机协同配送路径优化 蒋丽 11页

山东大学2022年强基计划校测真题 3页

整式乘法及因式分解纯计算题100道 10页

最新施工现场临时用电安全技术规范JGJ46-2022.. 14页

前行实修法1--92 76页

地藏仪轨 17页