当前位置: 首页 > wzjs >正文

智慧团建app官网下载seo去哪里学

智慧团建app官网下载,seo去哪里学,软件应用商店下载安装,做网络 批发的网站本文章是对《Windows程序设计》这本书第八章计时器的总结,如果有时间,可以去看书里的讲解,如果时间不充裕,想马上知道计时器该如何使用,欢迎阅读本文,本文已经将计时器的干货整理完毕! 什么是计…

本文章是对《Windows程序设计》这本书第八章计时器的总结,如果有时间,可以去看书里的讲解,如果时间不充裕,想马上知道计时器该如何使用,欢迎阅读本文,本文已经将计时器的干货整理完毕!


什么是计时器?

首先我们先要知道什么是计时器。我们的程序首先设定一个计时器,假如我定时一分钟,那么系统就会每过一分钟就往我们程序的消息队列中插入一个WM_TIMER消息,这样,在理想的情况下,我们的窗口过程函数就会每过一分钟,处理一次WM_TIMER消息。让系统每过一段时间(这个时间由我们自己设定),向我们程序发送一个WM_TIMER消息(其实是放到消息队列),这就是计时器。


计时器有什么用?

如果我们现在有一个需求, 每过一分钟刷新一下程序的界面,那么,我们程序如何做才能知道一分钟过去了呢?我们可以循环获取时间戳,然后来比较差值,但有了计时器,我们就有了另一种方法,我们程序首先设定一个计时器,这个计时器的时间间隔是一分钟,然后程序在每过一分钟都会收到WM_TIMER消息,我们就可以在处理这个消息的时候写代码来刷新程序界面。


计时器有哪些注意要点?

1.计时器并不是十分精准的

当我们设置一个时间(以毫秒为单位),Windows系统会维护一个计数值,硬件时钟滴答出现一次,那么Windows维护的计数值就会减1,当计数值减到0,Windows会把WM_TIMER消息放到相应程序的消息队列,然后把计数值恢复到原始值。既然如此,Windows投递WM_TIMER的时间会与硬件时钟滴答有关,Windows 98上,计时器有55毫秒的周期,Windows NT上,计时器有10毫秒的周期。

接下来拿Windows 98这个计时器周期举例,55毫秒为一个滴答,当我们设置1000毫秒(1秒)的时候,系统会把1000除以55等于18.2,然后保留整数18这个数值作为计数值,也就是18个硬件时钟滴答(990毫秒)就会让系统将一个WM_TIMER消息放到程序的消息队列中。如果设置计时器的时候时间小于55毫秒,则系统的计数值是一个滴答,每过55毫秒,系统就会将WM_TIMER放到程序的消息队列。

2.计时器消息是同步的

当设定的时间一到,系统会将WM_TIMER消息放到程序的消息队列,当程序之前的消息都处理完成,才会通过消息循环取出计时器消息,而不用担心计时器消息一产生,就会打断程序正在处理的其他消息。WM_TIMER消息是低优先级的,只有当消息队列其他消息处理完毕,才会去处理WM_TIMER。

3.系统不会连续产生多个WM_TIMER消息

WM_TIMER消息和WM_PAINT消息一样,当程序处理某个消息很费时,消息队列中有WM_TIMER消息处于等待被处理,系统是不会将WM_TIMER放到队列里,而是将WM_TIMER消息合并到一起,形成一个消息,这样程序就不会收到大量的WM_TIMER消息。

总结:

计时器消息虽然不十分精准,但已经很精准了,只差几毫秒,对于大部分程序,我们可以忽略这种误差。另外如果我们处理一个耗时的消息时,计时器消息有可能丢失,或者等待太久,这种情况我们可以利用多线程,将耗时的工作放到线程中,从而避免阻塞。


计时器的三种使用方法是什么?

我们程序里可以使用SetTimer函数来设定一个计时器。当你设定计时器后,程序就会在一定的时间收到WM_TIMER消息,如果想停止这个计时器,可以用KillTimer函数。

用法1.
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{case WM_CREATE:SetTimer(hwnd, ID_TIMER, 1000, NULL); // ID_TIMER是计时器ID,是自定义宏return 0;case WM_TIMER:// 你想在计时器里处理的内容return 0;case WM_DESTROY:KillTimer(hwnd, ID_TIMER);PostQuitMessage(0);return 0;// 其他消息处理return DefWindowProc(hwnd, message, wParam, lParam);
}

这里我直接列出了应用程序的窗口过程函数。我们在处理WM_CREATE消息时设置了一个计时器,第一个参数是窗口的句柄,第二个参数是计时器ID,是一个非负整数,如果你想设置多个计时器,那么设置每一个计时器的时候,ID是不能重复的,也不能是0,当我们需要KillTimer的时候,将要停止的计时器的ID传入即可,第三个参数是想要定时的时间,以毫秒为单位,这里我们设置1000毫秒,也就是1秒,第四个参数是NULL。我们设置好计时器后,程序就会在每一秒中,收到WM_TIMER消息,然后我们在收到消息的时候进行处理即可。在程序结束前,我们调用KillTimer函数来关闭计时器,开启计时器后不忘关闭,是一个好习惯。

用法2.
VOID CALLBACK TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{// 你想处理的代码
}LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{case WM_CREATE:SetTimer(hwnd, ID_TIMER, 1000, TimerProc); // ID_TIMER是计时器ID,是自定义宏return 0;case WM_DESTROY:KillTimer(hwnd, ID_TIMER);PostQuitMessage(0);return 0;// 其他消息处理return DefWindowProc(hwnd, message, wParam, lParam);
}

这个用法和用法1类似,唯一不同的是处理计时器代码的位置,用法1我们在SetTimer函数的第四个参数设置为NULL,这个参数代表一个回调函数指针,当设置为NULL,则处理代码要在窗口过程函数的WM_TIMER中进行处理,一旦这个参数设置了回调函数,那么在收到WM_TIMER消息之后,会直接扔进这个回调函数进行处理,而不用进入到窗口过程函数中处理WM_TIMER。这个回调函数的写法大家要注意,函数名可以随便起,但是函数的参数和返回值类型,要和上面代码中的例子保持一致,另外别忘了在回调函数名前面加CALLBACK。

用法3.
// 设置计时器
iTimerID = SetTimer(NULL, 0, 1000, TimerProc);// 结束计时器
KillTimer(NULL, iTimerID);

这个方法用起来比较另类,它的用法和用法2类似,要有自己的计时器回调函数。首先第一个参数是NULL,第二个参数本来是设置计时器ID,但是这里设置0,第三个和第四个参数和用法2一样,调用完这个函数之后会返回一个计时器ID,我们要在某个位置保存这个计时器ID,方便关掉这个计时器的时候用。KillTimer的第一个参数也是NULL。


结语

至此,Windows计时器的用法已经讲解完毕,我知道,这个计时器的用法很简单,每当我读《Windows程序设计》读不进去的时候,都会回到计时器这一章来寻找安慰。

http://www.dtcms.com/wzjs/326861.html

相关文章:

  • 网站建设事项百度百度一下就知道
  • 网站url和网站域名苏州百度推广开户
  • 深圳小企业网站建设设计制作郴州seo快速排名
  • wordpress 媒体库插件刷百度关键词排名优化
  • 建设网站的技术手段企业培训计划
  • 苏州专业做网站的公司哪家好网络营销员岗位的职责与要求
  • 网站建设模板系统福鼎网站优化公司
  • 党建专栏 文字说明 网站建设同城发广告的平台有哪些
  • 企业网站制作的书网络推广公司哪家做得好
  • 微商网站开发烘焙甜点培训学校
  • 东莞塘厦网站制作seo外包公司怎么样
  • 一家专门做海报的网站模板网站建站公司
  • 烟台做网站多少钱seo如何提升排名收录
  • wordpress mac怎么设置密码seo网站推广是什么
  • 在线设计平台的销售seo排名工具
  • 全屋整装十大公认品牌有哪些seo在中国
  • 怎样做才能让百度搜到网站产品磁力多多
  • 网页设计与制作笔记网站seo优化皆宣徐州百都网络不错
  • 网站建设质量保证链接提交入口
  • 网站月流量找谁做百度关键词排名
  • php网站建设的基本流程图变现流量推广app
  • 电脑网站怎样给网页做适配营销思路八大要点
  • wordpress 倒计时插件网站优化价格
  • 2018爱情动做网站站长
  • 为知笔记 导入wordpressseo属于什么
  • 网站弹出窗口代码站长之家查询网站
  • 家里面的服务器可以做网站吗网址搜索引擎入口
  • 大连电子商务网站建设百度快照推广
  • 东营有做网站的公司关键词排名点击
  • 做网站需要会什么软件网站收录查询