用户感觉到软件的好用,就是可以定时地做一些工作,而不需要人参与进去。比如每天定时地升级病毒库,定时地下载电影,定时地更新游戏里的人物。要想实现这些功能,就可以使用定时器的API函数CreateWaitableTimer和SetWaitableTimer来实现了,这对API函数创建的时钟是比较精确的,可以达到100倍的10亿分之一秒。
 
函数CreateWaitableTimer和SetWaitableTimer声明如下:
 
WINBASEAPI
__out
HANDLE
WINAPI
CreateWaitableTimerA(
    __in_opt LPSECURITY_ATTRIBUTES lpTimerAttributes,
    __in     BOOL bManualReset,
    __in_opt LPCSTR lpTimerName
    );
WINBASEAPI
__out
HANDLE
WINAPI
CreateWaitableTimerW(
    __in_opt LPSECURITY_ATTRIBUTES lpTimerAttributes,
    __in     BOOL bManualReset,
    __in_opt LPCWSTR lpTimerName
    );
#ifdef UNICODE
#define CreateWaitableTimer CreateWaitableTimerW
#else
#define CreateWaitableTimer CreateWaitableTimerA
#endif // !UNICODE

f M a n u a l R e s e t参数用于指明人工重置的定时器或自动重置的定时器。
当发出人工重置的定时器信号通知时,等待该定时器的所有线程均变为可调度线程。当发出自
动重置的定时器信号通知时,只有一个等待的线程变为可调度线程。

WINBASEAPI
BOOL
WINAPI
SetWaitableTimer(
    __in     HANDLE hTimer,
    __in     const LARGE_INTEGER *lpDueTime,
    __in     LONG lPeriod,
    __in_opt PTIMERAPCROUTINE pfnCompletionRoutine,
    __in_opt LPVOID lpArgToCompletionRoutine,
    __in     BOOL fResume
    );
 
lpTimerAttributes是设置定时器的属性。
bManualReset是是否手动复位。
lpTimerName是定时器的名称。
hTimer是定时器的句柄。
lpDueTime是设置定时器时间间隔,当设置为正值是绝对时间;当设置为负数是相对时间。
lPeriod是周期。
pfnCompletionRoutine是设置回调函数。
lpArgToCompletionRoutine是传送给回调函数的参数。
fResume是设置系统是否自动恢复。
 
调用函数的例子如下:
#001 //创建定时器
#002

#003  int CreateTestTimer(void)
#004  {
#005         HANDLE hTimer = NULL;
#006         LARGE_INTEGER liDueTime;
#007
#008         //设置相对时间为10秒。
#009         liDueTime.QuadPart = -100000000;
#010
#011         //创建定时器。
#012        hTimer = CreateWaitableTimer(NULL, TRUE, _T("TestWaitableTimer"));
#013         if (!hTimer)
#014         {              
#015               return 1;
#016         }
#017
#018         OutputDebugString(_T("10秒定时器\r\n"));
#019
#020         // 设置10秒钟。
#021        if (!SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0))
#022         {        
#023               //
#024               CloseHandle(hTimer);
#025               return 2;
#026         }
#027
#028         //等定时器有信号。
#029         if (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0)
#030         {
#031               OutputDebugString(_T("10秒定时器出错了\r\n"));   
#032               //
#033               CloseHandle(hTimer);
#034               return 3;
#035         }
#036         else
#037         {
#038               //10秒钟到达。
#039               OutputDebugString(_T("10秒定时器到了\r\n"));            
#040         }
#041
#042         //
#043         CloseHandle(hTimer);
#044         return 0;
#045  }

转载于:https://www.cnblogs.com/dongzhiquan/archive/2009/04/09/1994906.html

Windows API CreateWaitableTimer和SetWaitableTimer相关推荐

  1. 转载 CreateWaitableTimer和SetWaitableTimer函数

    用户感觉到软件的好用,就是可以定时地做一些工作,而不需要人参与进去.比如每天定时地升级病毒库,定时地下载电影,定时地更新游戏里的人物.要想实现这些功能,就可以使用定时器的API函数CreateWait ...

  2. C#通过Windows API捕获窗,获取窗口文本(FindWindow、GetWindowText),附录:Windows窗口消息大全、Windows API大全

    文章目录 一.前言 二.使用Spy++工具分析窗口 三.C#通过Windows API捕获窗口,获取窗口文本 四.附录:Windows窗口消息 五.Windows API大全 1.API之网络函数 2 ...

  3. Windows API 函数大全

    Windows API函数大全,从事软件开发的朋友可以参考下 1. API之网络函数  WNetAddConnection 创建同一个网络资源的永久性连接  WNetAddConnection2 创建 ...

  4. Windows API函数大全(方便查找)

    Windows API函数大全 目录 Windows API函数大全 1. API之网络函数 2. API之消息函数 3. API之文件处理函数 4. API之打印函数 5. API之文本和字体函数 ...

  5. WINDOWS API函数说明

    Windows API函数大全,从事软件开发的朋友可以参考下 1. API之网络函数  WNetAddConnection 创建同一个网络资源的永久性连接  WNetAddConnection2 创建 ...

  6. 易语言常用WINdows API分类查询

    WINdows API分类 1.API之网络函数 2.API之消息函数 3.API之文件处理函数 4.API之打印函数 5.API之文本和字体函数 6.API之菜单函数 7.API之位图.图标和光栅运 ...

  7. Windows API函数速查

    http://blog.csdn.net/ghevinn/article/details/8213614 Windows API函数速查 1. API之网络函数 WNetAddConnection 创 ...

  8. Windows API

    一.简要介绍 Windows API 就是windows应用程序接口,是针对microsoft windows操作系统家族的系统编程接口,这样的系统包括Windows 8,Windows 7,Wind ...

  9. C#中调用Windows API时的数据类型对应关系

    C#中调用Windows API时的数据类型对应关系 原文 C#中调用Windows API时的数据类型对应关系 BOOL=System.Int32 BOOLEAN=System.Int32 BYTE ...

最新文章

  1. 程序员能成为设计师吗
  2. tomcat手动发布
  3. Webpack 4进阶--从前的日色变得慢 ,一下午只够打一次包
  4. 又双叒叕 - 中国汉字的奇妙
  5. 还在使用if else写代码?试试 “策略模式” 吧!
  6. 为什么我使用Java
  7. 使用eclipse调试hive mapreduce
  8. python3_实现BP神经网络 + BP神经网络应用实例
  9. 树莓派 网络附加存储NAS系统和USB外接硬盘文件服务器
  10. Linux学习笔记RHEL 7(九)--RHEL7.0 DNS服务配置
  11. 贝恩分类法(行业集中度)
  12. 选购云服务器时云盘该如何选择?(高性能/SSD/增强型/急速型)
  13. Flutter 使用 ESC/POS蓝牙或以太网库控制热敏打印机
  14. 微信公众平台服务器配置时token验证失败
  15. 什么品牌的蓝牙耳机音质最好?高品质蓝牙耳机排行榜
  16. 5424. 【NOIP2017提高A组集训10.25】凤凰院凶真
  17. 每周一品 · 无线充电设备中的磁性材料
  18. 通过虚拟驱动vivi分析摄像头驱动
  19. 硅谷之思:数据的永生
  20. OUC软件开发实验1

热门文章

  1. xubntu18.10中的conky配置文件
  2. Flask Web中的db.relationship()
  3. 【机器学习】线性回归之Normal Equation(矩阵求导与线性代数视角)
  4. m40型工业机器人_工业机器人4大控制方式,你知道几种?
  5. maven打jar包pom配置
  6. Windows 10 中 VMware 要求禁用 Device Guard 问题
  7. bzoj5252 [2018多省省队联测]林克卡特树
  8. Mysql 的表级锁和行级锁
  9. 【AIX 命令学习】lsattr 显示一个给定设备或一种设备的属性
  10. org.tinygroup.databasebuinstaller-数据库结构及元数据自动创建