SetTimer是设置定时器,每隔一段时间执行一个操作,原型如下

  UINT_PTR SetTimer(

  HWND hWnd, // 窗口句柄

  UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器

  UINT uElapse, // 时间间隔,单位为毫秒

  TIMERPROC lpTimerFunc // 回调函数

  );

它是通过分发WM_TIMER消息来触发回调函数的,看下面代码

  1. void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
  2. {
  3. printf("%s","abc");
  4. }
  5. void main()
  6. {
  7. SetTimer(0, 0, 1000, &TimerProc);
  8. }

你认为上面的代码会正确执行吗,答案是不会,回调函数根本得不到执行。因为虽然使用了SetTimer,但是没有对WM_TIMER消息进行分发,所以不会触发回调函数,我们修改如下

  1. void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
  2. {
  3. printf("%s","abc");
  4. }
  5. void main()
  6. {
  7. SetTimer(0, 0, 1000, &TimerProc);
  8. MSG   msg;
  9. while(GetMessage(&msg,NULL,0,0))
  10. {
  11. if(msg.message==WM_TIMER)
  12. {
  13. DispatchMessage(&msg);
  14. }
  15. }
  16. }

OK,看到上面的while循环了吗,这里就是获取每秒钟发出的WM_TIMER消息,并分发下去,通知回调函数开始执行。

参考:http://blog.csdn.net/bdmh/article/details/6371443

经测试可行,完整代码:

#include "stdafx.h"
#include "windows.h"
#include "stdio.h" void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
{
printf("%s","abc"); }
void main()
{
SetTimer(, , , &TimerProc);
MSG msg;
while(GetMessage(&msg,NULL,,))
{
if(msg.message==WM_TIMER)
{
DispatchMessage(&msg);
}
}
}

如果这样写:

MSG msg;
GetMessage(&msg, NULL, 0, 0);

这样消息队列是有了,但是没有人分发消息那还是不行,不会执行TimerProc的内容的。

----------------------------------------------------------------------------------------------

Delphi版本:

最新文章

  1. Bootstrap表单验证插件bootstrapValidator使用方法整理
  2. 我的第一个hadoop程序
  3. GJM : 用Unity模仿CSGO里的火焰效果 [转载]
  4. 百度地图TILE算法
  5. 第二题 已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数 2008 北京奥运会男足参赛国家: 科特迪瓦,阿根廷,澳大利亚,塞尔维亚,荷兰,尼日利亚、日本,美国,中国,新西 兰,巴西,比利时,韩国,喀麦隆,洪都拉斯,意大利
  6. iOS--更新cooped库
  7. IOS OC 计算器算法(不考虑优先级)
  8. Ubuntu 中安装 NetBeans IDE
  9. 调用xml文件的bean
  10. 垃圾回收 GC
  11. [设计模式]<<设计模式之禅>>关于里氏替换原则
  12. JDBC——事物管理
  13. chinaunix:腾讯面试题
  14. 关于iconfont字体图标的使用
  15. NodeJs的async
  16. 【转】如何使用slave_exec_mode优雅的跳过1032 1062的复制错误
  17. sqlyog试用期到期--win10
  18. canvas三角函数模拟水波效果
  19. 转录组分析---Hisat2+StringTie+Ballgown使用
  20. Mybatis学习(4)输入映射、输出映射、动态sql

热门文章

  1. HDU 4474 Yet Another Multiple Problem BFS
  2. 参加EMCL感想
  3. Objective-C类成员变量深度剖析--oc对象内存模型
  4. PKCS #1 RSA Encryption Version 1.5 填充方式
  5. C# MVC 返回html内容
  6. 关于Arrays协助类中的排序方法
  7. Java设计模式之JDK动态代理原理
  8. Python 非空即真、列表生成式、三元表达式 day3
  9. python 从Excel中取值
  10. eas之怎么设置单据保存或者提交完不跳到下个新增页面