SetTimer在无窗口和有窗口线程的使用 .

2023-10-28

 今天犯了一个粗心的错误,在无窗口线程中,SetTimer中设置计时器ID,而WM_TIMER消息响应函数中得到的计时器ID却不是之前设置的计时器ID.

// 111902.cpp : Defines the entry point for the console application.
//
//#include "stdafx.h"
#include "stdio.h"
#include "windows.h"
BOOL DispatchThreadMessage(MSG* pMsg);
VOID CALLBACK OnTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime);
int main(int argc, char* argv[])
{
	printf("Hello World!\n");
	::SetTimer(NULL,45,1000,OnTimerProc);
	MSG msg;
	while (GetMessage(&msg, 0, 0, 0) > 0)
	{
		if (msg.hwnd == NULL && DispatchThreadMessage(&msg))
			continue;
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;
}

BOOL DispatchThreadMessage(MSG* pMsg)
{
	if(pMsg->message == 0x0113)
	{
		printf("DispatchThreadMessage: %6d\n",pMsg->wParam);
		return false;		
	}
	return false;
} 
VOID CALLBACK OnTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
{
	printf("OnTimerProc: %6d\n",idEvent);
}

对应计时器ID的输出的是一个随机数字.

 

原来在msdn中

nIDEvent
[in] Specifies a nonzero timer identifier. If the hWnd parameter is NULL, and the nIDEvent does not match an existing timer then it is ignored and a new timer ID is generated. If the hWnd parameter is not NULL and the window specified by hWnd already has a timer with the value nIDEvent , then the existing timer is replaced by the new timer. When SetTimer replaces a timer, the timer is reset. Therefore, a message will be sent after the current time-out value elapses, but the previously set time-out value is ignored. If the call is not intended to replace an existing timer, nIDEvent should be 0 if the hWnd is NULL.

注:只有当hWnd参数为非空时,计时器的ID为设置的 nIDEvent,  否则系统为你自动生成一个计时器ID,可由返回时值获取.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SetTimer在无窗口和有窗口线程的使用 . 的相关文章

随机推荐

  • HADOOP调优与运维问题汇总

    一 Hadoop调优 1 调整操作系统打开文件描述符的上限 通过命令 ulimit a 可以看到所有系统资源参数 这里面需要重点设置的是 open files 和 max user processes 其它可以酌情设置 要永久设置资源参数
  • python 中 np.sum()函数 通俗易懂理解!

    查看我的另一篇博客更清晰 https blog csdn net goodshot article details 79709884 这一篇博客保证是我写的最清楚 最容易理解的博客 众所周知 sum不传参的时候 是所有元素的总和 这里就不说
  • AJAX的使用方式及教程

    1 概念 ASynchronous JavaScript And XML 异步的JavaScript 和 XML 1 异步和同步 客户端和服务器端相互通信的基础上 客户端必须等待服务器端的响应 在等待的期间客户端不能做其他操作 客户端不需要
  • 数据挖掘一些面试题总结(Data Mining)

    Data Mining试题 2011Alibaba数据分析师 实习 试题解析 一 异常值是指什么 请列举1种识别连续型变量异常值的方法 异常值 Outlier 是指样本中的个别值 其数值明显偏离所属样本的其余观测值 在数理统计里一般是指一组
  • Fastjson

    1 介绍 Fastjson是阿里巴巴的开源JSON解析库 它可以解析JSON格式的字符串 支持将Java Bean序列化为JSON字符串 也可以从JSON字符串反序列化到JavaBean 具有执行效率高的特点 应用范围广泛 Fastjson
  • (基础)选择器的语法

    1 什么是选择器 CSS选择器是CSS规则的第一部分 每个CSS规则都以一个选择器或一组选择器为开始 CSS 选择器即用于 查找 或选取 要设置样式的 HTML 元素的模式 选择器可以分为基础选择器 复合选择器 2 基本选择器 1 通配 通
  • SpringBoot应用程序的打包和部署 [学习笔记]

    传统Web应用打包部署时 通常会用War包的形式 然后将War包部署到Tomcat等服务器中 而Spring Boot应用是嵌入式Servlet容器 默认以Jar包形式进行打包部署的 而如果想要使用传统的War包形式打包部署 需要进行配置
  • WebKit中RefPtr和PassRefPtr的使用

    历史 WebKit中的许多对象是引用计数的 reference counted 采用的模式就是类具有ref和deref成员函数增加和减少引用计数 每个ref调用必须有一个deref与之匹配 当在引用计数值为1的对象上调用deref方法时 对
  • OSX 中为php安装 apc 扩展

    php中安装apc扩展 AndyMacBookPro log andy pecl install apc downloading APC 3 1 13 tgz Starting to download APC 3 1 13 tgz 171
  • Linux-docker下载docker-compose很慢、太慢、中断解决办法

    出现下一部分就断开的问题时 直接去github上下载后 传到虚机上 改个名字就可以 下载地址 https github com docker compose releases tag v2 2 2 2 2 2是对应版本 可修改 一般都是红框
  • RPA Uipath学习心得

    由于工作中存在大量繁琐的流程化事项 因此采用傻瓜机器人Uipath在后台处理 使得有更多时间去做创造性的工作 1 官网下载安装及教程 https www uipath com 2 基本操作步骤 首先是创建程序 然后调试运行 检查发布即可 3
  • MySQL全连接查询

    mysql没有全连接 但我们可以通过以下两种方式实现 1 使用union和left join实现全连接 select xxx 查询字段 from table1 left join table2 on xxx 连接条件 下同 where xx
  • LinuxMint上硬盘重装LinuxMint(理论上ubuntu也行)

    主要思路是通过修改引导程序 grub2 的配置文件 boot grub grub cfg 使计算机开机后引导硬盘中存放的系统镜像文件 iso 步骤 1 将下载好的系统镜像文件放入硬盘中一个不会被格式化的分区中 为了方便我直接放在了sda1的
  • C语言可以开发哪些项目?

    C语言是我们大多数人的编程入门语言 对其也再熟悉不过了 不过很多初学者在学习的过程中难免会出现迷茫 比如 不知道C语言可以开发哪些项目 可以应用在哪些实际的开发中 这些迷茫也导致了我们在学习的过程中不知道如何学 学什么 所以 总结这个列表
  • treeSelect节点搜索

    antd中treeSelect的filterTreeNode用法 节点搜索 以下图为例 树形搜索展开后 有以下几个选项 如果我想要搜索其中 产品中心 那直接搜索关键词 产品 即可 我搜索后并未显示我想要的结果 而是为空 这就需要用到 fil
  • 总结JS 常用函数

    希望本文总结的内容能给各位看官带来焕然一新的感觉 另外 如果你们有什么值得推荐的js技巧 欢迎在评论中补充 我可以收纳在本文中 PS 此文档会持续新增内容 Ajax请求 jquery ajax函数 我自己封装了一个ajax的函数 代码如下
  • sudo 之后 unable to resolve host的问题解决办法

    gedit etc hosts 127 0 0 1 localhost 127 0 0 1 Masterback或者其他 把后面的Masterback 或者其他改成新的主机名 应该是最近修改过主机名 也就是用户名 后面的部分
  • _WIN32和_WIN64区别

    WIN32 是一个预定义的宏 用于判断当前编译环境是否为 Windows 操作系统 当使用 MSVC 编译器编译 Windows 应用程序时 无论是 32 位还是 64 位的 Windows 环境 WIN32 宏都会被定义 你可以使用条件编
  • 蓝桥杯2021年第十二届国赛真题-和与乘积

    题目描述 给定一个数列 A a1 a2 an 问有多少个区间 L R 满足区间内元素的乘积等于他们的和 即 aL aL 1 aR aL aL 1 aR 输入格式 输入第一行包含一个整数 n 表示数列的长度 第二行包含 n 个整数 依次表示数
  • SetTimer在无窗口和有窗口线程的使用 .

    今天犯了一个粗心的错误 在无窗口线程中 SetTimer中设置计时器ID 而WM TIMER消息响应函数中得到的计时器ID却不是之前设置的计时器ID 111902 cpp Defines the entry point for the co