// TimerAPCRoutine.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <time.h> using namespace std; void GetSystemTime();
VOID CALLBACK TimerAPCRoutinue(
_In_opt_ LPVOID lpArgToCompletionRoutine,
_In_ DWORD dwTimerLowValue,
_In_ DWORD dwTimerHighValue
); int main()
{
LARGE_INTEGER DueTime;
DueTime.QuadPart = -''000LL;//倒计时3秒 从调用到显示的时间 HANDLE TimeHandle = NULL;
TimeHandle =
CreateWaitableTimer(
NULL,
//TRUE, //BOOL bManualReset
FALSE,
NULL
); if (!SetWaitableTimer(
TimeHandle,
&DueTime, //第一次,The time after which the state of the timer is to be set to signaled
, //第二次执行与第一次执行的间隔 周期 1秒 The period of the timer
TimerAPCRoutinue,
NULL, )
)
{
printf("SetWaitableTimer FAIL: %d \r\n", GetLastError());
return ;
} //进入可提醒状态 可提醒IO
/*
while (1)
{
WaitForSingleObjectEx(TimeHandle, INFINITE,TRUE);
}
*/
//这里的话只能走2次,应该是等待时间的问题
/*
指针放到APC中,还没有执行,后面一次就来了。要使用SleepEx
感觉这里WaitFoeSingleObjectEx 不同的地方
*/
for (int i = ;i < ; i++)
{
//WaitForSingleObjectEx(TimeHandle, INFINITE,TRUE); //阻塞不住
/*
windows核心编程 p250
线程不应该在等待一个计时器句柄的同时以可提醒的方式等待同一个计时器。 HANDLE hTimer = CreateWaitableTimer(NULL,FALSE,NULL);
SetWaitableTimer(hTimer,...,TimerAPCRoutinyr,...);
WaitForSingleObjectEx(hTimer,INFINTE,TRUE); 我们不应该编写此类代码,因为对WaitForSingleObjectEx的调用
实际上会等待计时器两次:一次是可提醒的,另一次是内核对象句柄。
当计时器被触发的时候,等待成功,线程被唤醒,这使线程退出可提醒状态
APC函数没有被调用。我们一般很少有理由要在使用可等待计时器的同时使用APC函数,
因为我们总是可以先等待计时器被触发,然后在执行我们想要的操作。 */ SleepEx(
INFINITE, // Wait forever
TRUE);
} printf("input any key to exit\r\n");
getchar(); return ;
} VOID CALLBACK TimerAPCRoutinue(
_In_opt_ LPVOID lpArgToCompletionRoutine,
_In_ DWORD dwTimerLowValue,
_In_ DWORD dwTimerHighValue
)
{
GetSystemTime(); } void GetSystemTime()
{
time_t t = time();
char tmp[];
strftime(tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z", localtime(&t));
puts(tmp);
}

让可等待的计时器添加APC调用的更多相关文章

  1. 可等待计时器添加APC测试

    可等待计时器和用户计时器的最大区别在于用户计时器需要在应用程序中使用大量的用户界面基础设施,从而消耗更多的资源.此外,可等待计时器是内核对象,这意味着他们不仅可以在多个线程间共享,而且具备安全性. 用 ...

  2. PHP制作个人博客-广告位添加与调用 推荐文章数据调取

    上一节博客的导航我们已经动态调取,这一节我们主讲一下如何根据页面布局,后台添加广告位,及模板上动态调取广告.博客推荐文章的数据调用. 首先我们在云码博客的后台添加10条左右的测试数据,thinkcmf ...

  3. go程序添加远程调用tcpdump功能

    最近开发的telemetry采集系统上线了.听起来高大上,简单来说就是一个grpc/udp服务端,用户的机器(路由器.交换机)将它们的各种统计数据上报采集.整理后交后端的各类AI分析系统分析.目前华为 ...

  4. 添加webservice调用日志

    之前想用spring的AOP给webservice添加切面的,但是使用around切面后,居然调用端得不到webservice的返回结果,而且报文的详细情况也不得而知,很是尴尬,所以偷了个懒.但是该做 ...

  5. 一步步实现一个基本的缓存模块·续, 添加Memcached调用实现

    jusfr 原创,转载请注明来自博客园. 在之前的实现中,我们初步实现了一个缓存模块:包含一个基于Http请求的缓存实现,一个基于HttpRuntime.Cache进程级的缓存实现,但观察代码,会发现 ...

  6. 织梦DedeCMS给栏目添加缩略图调用的方法

    织梦DedeCMS的栏目调用仅仅只有文字调用,没有栏目缩略图调用,而我们有时候又需要给栏目添加缩略图,并能够在前台调用,就可以试试通过下面的方法,给栏目添加缩略图. 首先要给栏目数据库表添加一个存储缩 ...

  7. 如何添加WebService调用时的用户认证

    场景: 当把发布好的WebService地址或WSDL提供给调用方时,需要对方先进行身份的认证通过后才允许接口的进步访问.而不是公开的谁都可以调用. 解决: 1.在IIS中设置对应网站的目录访问权限. ...

  8. springboot 项目添加jaeger调用链监控

    1.添加maven依赖<dependency> <groupId>io.opentracing.contrib</groupId> <artifactId&g ...

  9. 《Windows核心编程系列》十一谈谈Windows线程池

    Windows线程池 上一篇博文我们介绍了IO完成端口.得知IO完成端口可以非常智能的分派线程.但是IO完成端口仅对等待它的线程进行分派,创建和销毁线程的工作仍然需要我们自己来做. 我们自己也可以创建 ...

随机推荐

  1. [Wannafly挑战赛28][B msc和mcc][预处理+枚举]

    链接:https://ac.nowcoder.com/acm/contest/217/B来源:牛客网 msc和mcc 题目描述 msc和mcc是一对好朋友,有一天他们得到了一个长度为n的字符串s. 这 ...

  2. 初始if..else 条件语句

    if..else条件语句 如果我们希望有效的响应用户的输入,代码就需要具有判断能力.能够让程序进行判断的结构成为条件,条件判断语句返回的是布尔值真或假,真就执行一条线路,假就执行另外一条线路 if 条 ...

  3. python英文与中文的词频统计

    1.统计英文单词, # 1.准备utf-8编码的文本文件file(已在文件夹中定义了 一个名叫“head.txt.rtf”文本文件,详情请见截图) def getTxt(): #3对文本预处理(包括) ...

  4. vue全家桶+Koa2开发笔记(6)--app开发

    1.环境配置 详见文章<Nuxt 开发 - 项目初始化> 1.1  使用nuxt脚手架  https://zh.nuxtjs.org/guide/installation 1.2 在nod ...

  5. vue全家桶+Koa2开发笔记(2)--koa2

    1. 安装koa脚手架的时候 执行命令 koa2 -e koa-learn 注意要使用-e的方式,才会生成ejs的模板 2. async await的使用方法:存在的意义:提高promise的可读性 ...

  6. Singer 学习三 使用Singer进行mongodb 2 postgres 数据转换

    Singer 可以方便的进行数据的etl 处理,我们可以处理的数据可以是api 接口,也可以是数据库数据,或者 是文件 备注: 测试使用docker-compose 运行&&提供数据库 ...

  7. Modern Data Lake with Minio : Part 1

    转自:https://blog.minio.io/modern-data-lake-with-minio-part-1-716a49499533 Modern data lakes are now b ...

  8. setsockopt调用IP_ADD_MEMBERSHIP出错errno:19 no such device

    if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) < 0) {                 pri ...

  9. idea+maven+springmvc+helloworld

    1.添加依赖,并在项目上添加Spring mvc框架的支持(add FrameWork Support): <dependency> <groupId>junit</gr ...

  10. Mybatis中在log日志或控制台打印执行的sql

    最近在调试代码时,需要查看当前操作执行的sql,在日志里没查到,经过修改logback配置后成功,现记录如下:一.Mybatis版本是3.0.6(我正在用的版本)该版本只需要修改logback.xml ...