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版本:

控制台中使用SetTimer的提醒的更多相关文章

  1. C# 计算字符串在控制台中的显示长度

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  2. 利用跨域请求来隐藏firbug控制台中的Ajax请求

    本文链接:http://www.orlion.ml/63/ 普通jquery的Ajax请求在控制台中是可见的,如下: 而在利用jsonp(json with padding)进行Ajax跨域时,发现A ...

  3. 在 C# 控制台中记录异常日志并输出

    最近做了一个小程序,要求在控制台中记录程序运行的异常并输出到指定的文件夹中,以下是我的具体的程序代码: public static void ErrorLog(Exception ex) { stri ...

  4. 关于 JavaScript 中一个小细节问题 (在控制台中直接 {Name:'王尼玛',Age:20} 对象报错问题)

    在 Chrome 浏览器,大家可能遇到这样一个小问题. 随便输入一个 Object 对象  ,比如 {Name:'王尼玛',Age:20} ,将会报错.之前,也从来没去考虑过到底是为啥原因. 今天,刚 ...

  5. 转:在控制台中调试AngularJS应用

    在控制台中调试AngularJS应用 在创建AngularJS应用时,一个很棘手的问题是如何在Chrome,Firefox,以及IE的JavaScript控制台中访问深藏在应用中的数据和服务.本文将会 ...

  6. Chrome 开发者控制台中,你可能意想不到的功能

    Chrome 有内置的开发者工具.它拥有丰富的特性,比如元素(Elements).网络(Network)和安全(Security).今天,我们主要关注一下 JavaScript 控制台. 当我最初写代 ...

  7. ASP.NET Web API实践系列09,在Fiddler和控制台中模拟GET和POST请求

    ASP.NET Web API本质是由一个进程托管的一组类,需要宿主,这个宿主可以是ASP.NET应用程序,可以是MVC项目,可以是控制台应用程序,也可以是自己定制的宿主. 在VS2012中创建一个& ...

  8. 【转载】chrome控制台中看见的cookie属性详解

    在chrome控制台中的resources选项卡中可以看到cookie的信息. 一个域名下面可能存在着很多个cookie对象. name字段为一个cookie的名称. value字段为一个cookie ...

  9. Java入门系列-07-从控制台中接收输入

    这篇文章帮你使用Scanner类从控制台接收输入 从控制台接收字符串 敲一敲: import java.util.Scanner; public class DemoScanner { public ...

随机推荐

  1. B - Is your horseshoe on the other hoof?

    Problem description Valera the Horse is going to the party with friends. He has been following the f ...

  2. MainActivity 多个Fragment 内存被回收

    0. 前言 应用首页采用Activity +Tab 模式,多个Fragment 替换显示隐藏 FragmentTransaction transaction = getSupportFragmentM ...

  3. 酷派改变者S1(C105/C105-6/C105-8) 解锁BootLoader 并刷入recovery root

    首先下载好工具链接:https://pan.baidu.com/s/1qZjOCUw 密码:u2dr 备用下载链接:https://pan.baidu.com/s/1pMlmAef 本篇教程教你如何傻 ...

  4. C# for 遍历 IPagedList

    IPagedList<Doc> ss = Doclist.ToPagedList(page, pageSize); ;i<ss.Count;i++) { var yy = ss[i] ...

  5. C# 去掉代码前边空格(格式化代码)

    private void button1_Click(object sender, EventArgs e) { textBox2.Text = ""; string str = ...

  6. static关键字的定义与使用

    static关键字概述 关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属于某个对象的.也就是说,既然属于类,就可以不靠创建对象来调用了. 1 ...

  7. eas之控制kdtable滚动条

    //滚动条支持三种状态 自动 隐藏 显示 public static final int SCROLL_STATE_AUTO=0://自动根据数据判断是否显示或隐藏 public static fin ...

  8. SQL第三节课

    常用函数 一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x) 返回x的绝对值 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等于x ...

  9. css image-set 让浏览器自动切换1x,2x图片

    方法一: <img src="img.png" srcset="path/img.png 2x,path/img.png.png 3x"/> 方法二 ...

  10. __int128的实现

    #include<bitset> #include<algorithm> #include<iostream> #include<string> #in ...