// 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. Version Control 版本控制

    一.version control是什么: version control版本控制,是指对软件开发过程中各种程序代码.配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一. 二.versi ...

  2. java知识整理

    整理一下Java知识点. 一.final finally finalize区别 1.final 修饰符(关键字).被final修饰的类,不能再派生出新的子类,不能作为父类而被子类继承.因此一个类不能既 ...

  3. 【maven】maven源码打包

    1.打包时附加外部Jar包 <!--编译+外部 Jar打包-->          <plugin>            <artifactId>maven-co ...

  4. 针对IE9的CSS兼容

    (自己亲自试过有用)针对IE9的CSS只需在相应CSS代码加入只有IE9识别的 \9\0.具体代码如下: .div{ background-color:#0f0\9\0;/* ie9 */ } 其他浏 ...

  5. DBUtils和连接池

    今日内容介绍 1.DBUtils 2.连接池 ###01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数 ...

  6. mysql 之mvcc多版本控制

    MVCC是multiversion concurrency control的缩写,提供MySQL事物隔离级别下无锁读,例如一个事物在执行update等修改数据的sql,并未提交时其他事物进行数据读取是 ...

  7. IO流的序列化和反序列化

    序列化和反序列化的概念: 序列化:把对象转换为字节序列的过程称为对象的序列化.(常见的就是存文件) 反序列化:把字节序列恢复为对象的过程称为对象阿德反序列化. 序列化和反序列化的使用: java.io ...

  8. src-d engine 强大的git 历史分析工具

    src-d engine 包含了Babelfish ,同时可以看作是Babelfish 的升级版本,我们可以使用sql 进行代码分析 备注: 注意运行的时候需要容器支持 使用 安装docker   参 ...

  9. 扩大UIButton的选区

          设计为了美观.button有时设计的太小,这么一来是好看了.可是button不好点中了.曾经有非常多解决方法,如用hitTest等方法. 都比較复杂.后来我发现一个简单的方法. 原理就是U ...

  10. vsphere和vmware快照的不足之处

    当快照创建时虚拟机执行一个读操作,hypervisor会检查快照VMDK,查看是否有被读取的区块存在.如果有,则从快照中为虚拟机提供这个区块,如果没有,虚拟机还需要去读取基础VMDK.如果只有一个快照 ...