核心编程第5版 245页到247页的讲到SetWaitableTimer函数的使用

其中提到 FILETIME类型到LARGE_INTEGER类型的转换问题,如下代码

	//我们声明的局部变量
HANDLE hTimer;
SYSTEMTIME st;
FILETIME ftLocal, ftUTC;
LARGE_INTEGER liUTC; //创建自动重置计时器
hTimer = CreateWaitableTimer(NULL,FALSE,NULL); //第一次触发时间是在2008年1月1日,在下午1:00(当地时间)。
st.wYear = 2008; //年
st.wMonth = 1; //1月
st.wDayOfWeek = 0; //忽略
st.wDay = 1; //1日
st.wHour = 13; //下午1点
st.wMinute = 0; //一个小时的第0分
st.wSecond = 0; //一个分钟的第0秒
st.wMilliseconds = 0; //一秒的第0毫秒 SystemTimeToFileTime(&st, &ftLocal); //将本地时间转换为UTC时间
LocalFileTimeToFileTime(&ftLocal, &ftUTC); //转换 FILETIME类型 为 LARGE_INTEGER类型 因为这2个类型的对齐方式不同
liUTC.LowPart = ftUTC.dwLowDateTime;
liUTC.HighPart = ftUTC.dwHighDateTime; //设置时间
SetWaitableTimer(hTimer, &liUTC, 6 * 60 * 60 * 1000,
NULL, NULL, FALSE);

书上说到

虽然FILETIME 结构和LARGE_INTEGER结构具有完全相同的二进制格式,但是这两个结构的对齐方式是不同的。所有FILETIME结构的地址必须对齐到32位边界(即地址是4的整数倍),而所有LARGE_INTEGER结构的地址则必须对齐到64位边界(即地址是8的整数倍)。调用SetWaitableTimer并传入FILETIME结构是否能够正常工作,取决于FILETIME结构是否正好在64位边界上。但是,编译器会确保LARGE_INTEGER结构的地址始终都在64位边界上,因此正确的做法(任何时候都能够正常工作的做法)是先把FILETIME的成员复制到LARGE_INTEGER的成员中,然后再把LARGE_INTEGER的地址传给SetWaitableTimer。

FILETIME类型到LARGE_INTEGER类型的转换的更多相关文章

  1. long l=88;这个表达式是正确的,因为long比int类型大,会发生自动转换

    long l=88;这个表达式是正确的,因为long比int类型大,会发生自动转换

  2. ACCESS中类型操作(限制、转换)

    ACCESS如何保留两位小数 1.可以通过修改表结构中字段的“小数位数”即可. 2.可以通过“更新查询”,将所有该字段的值更新为round(字段名,2) ACCESS如何转换类型 每个函数都可以强制将 ...

  3. Java JDBC中,MySQL字段类型到JAVA类型的转换

    1. 概述 在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案. 2. 类型映射  java.sql.Types定义了常 ...

  4. java中,字符串类型的时间数据怎样转换成date类型。

    将字符串类型的时间转换成date类型可以使用SimpleDateFormat来转换,具体方法如下:1.定义一个字符串类型的时间:2.创建一个SimpleDateFormat对象并设置格式:3.最后使用 ...

  5. int类型与char类型的转换

    ---------siwuxie095                 Java对char类型的数据在底层是按int类型来处理的 (只是显示出来仍然是字符型)         1.int类型与char ...

  6. LARGE_INTEGER类型

    最近在研究Windows驱动程序开发,遇到这样一个语句: devExt->PortBase  = (PUCHAR)(ULONG_PTR) portBasePA.QuadPart; 在源代码环境中 ...

  7. Java基础之8个基本类型及基本类型间转换

    8种基本数据类型 Java语言有8种基本数据类型, 分别用于存储整数.浮点数.字符数据和布尔类型数据.需要注意的是: 现在所介绍的仅仅是基本数据类型,后续还会介绍很多非基本数据类型.基本数据类型如图 ...

  8. python基础知识五 各类型数据方法补充,转换,分类,编码+坑中菜

    3.9各类型数据方法补充,转换,分类,编码,坑中菜 3.9.1数据类型方法补充 1.str:不可变 补充方法 s1.capitalize():首字母大写 s1 = "alex" s ...

  9. Docs-.NET-C#-指南-语言参考-关键字-值类型:内置数值转换

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-值类型:内置数值转换 1.返回顶部 1. 内置数值转换(C# 参考) 2019/10/22 C# 提供了一组整型和浮点数值类型. 任何 ...

随机推荐

  1. unity之Layer作用

    1.使用layer做分层渲染 创建两个物体 添加AB两个层级 分别为两个物体设置对应的层级 为摄像机选择渲染层次(在这个例子中,取消对B层的渲染) 在游戏界面中,将不会显示B层的游戏对象

  2. CodeForces 1200F

    题意略. 思路: 如果是问一下然后搜一下,那必然是不现实的.因此我们要预处理出所有的答案. 我们令mod = lcm(m1,m2,...,mn).可知,在任意一点,我们挑选两个不同的数c1.c2,其中 ...

  3. python大纲+变量基础详解

    1.python的历史 ​ python2和python3的区别 ​ 2004 Django框架的诞生 2.python是编程语言 ​ python 是解释型语言 3.python的种类 ​ cpyt ...

  4. Mybatis与SQL Server类型转换遇到的坑

    一. MyBatis SQL语句遇到的性能问题 1. 场景还原 假设我们有一张User表,其中包含userId.userName.gender字段,其中userId的数据类型为char(20),此时我 ...

  5. mac系统chrome浏览器快捷键

    开发中谷歌浏览器常用快捷键: 开发者工具台快捷键:option+command+iconsole控制台快捷键:option+command+j 或者 option+command+c 1. 标签页和窗 ...

  6. redis数据结构、持久化、缓存淘汰策略

    Redis 单线程高性能,它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题.redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放 ...

  7. Codefroces 939 C Convenient For Everybody

    939 C 题意:若干年以后地球会变成n个时区, 为了方便计时, 每个时区的时间从1:00开始到n:00点结束, 现在将要举行一场c赛, 每个时区内都有ai个人参加,并且比赛开始时间不早于当地时间s: ...

  8. CodeM 资格赛 B 可乐 思维

      分析: 我们假设购买一种可乐p瓶,我们可以得到期望:p*(m/n*a[i]+(n-m)/n*b[i]),由这个式子我们可以看出唯一的变量是i,所以可以遍历i找出式子的最大值 #include &l ...

  9. 一篇文章看懂JS执行上下文

     壹 ❀ 引 我们都知道,JS代码的执行顺序总是与代码先后顺序有所差异,当先抛开异步问题你会发现就算是同步代码,它的执行也与你的预期不一致,比如: function f1() { console.lo ...

  10. android中的菜单Menu

    Menu是一个接口, 他有2个子接口, SubMenu和ContextMenu; 前者菜单常见于按home键就会出现 ,后者是一个上下文菜单, 一般点击某个条目会在手机屏幕中出现一个类似悬浮窗口的菜单 ...