// 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. 实验吧—Web——WP之 Forms

    我们先打开解题链接: 做Web题的第一步就是查看网页源代码,当然,有些网页他不会让你点击右键,那么可以在地址栏里的地址前面加上:view-source: 当然也可以打开控制台F12 我们可以看到代码里 ...

  2. hdu 1556 A - Color the ball 数状数组做法

    #include<bits/stdc++.h> using namespace std; ; int n; int c[maxn]; int lowbit(int x) { return ...

  3. 求连续数字的和------------------------------用while的算法思想

    前端代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.as ...

  4. golang-build-error

    工程中同时有两个main文件,编译的时候提示: go build proxy/proxy.go pb/anti_spam.pb.go::: cannot find package "_/Us ...

  5. 汇编入门基础与helloworld

    一个存储器拥有128个存储单元,可存储128个byte(字节),一个bite则又是由8个二进制位即bit(比特)组成,bit是计算机的最小信息单位. 总线分为地址总线,控制总线,数据总线 一个cpu有 ...

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

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

  7. git 查看提交历史

    查看提交历史 git log 查看每次提交的具体改动内容 git log -p 查看某个文件历次提交的具体改动内容 git log -p <file name> # git log -p ...

  8. MapReduce案例:统计共同好友+订单表多表合并+求每个订单中最贵的商品

    案例三: 统计共同好友 任务需求: 如下的文本, A:B,C,D,F,E,OB:A,C,E,KC:F,A,D,ID:A,E,F,LE:B,C,D,M,LF:A,B,C,D,E,O,MG:A,C,D,E ...

  9. RedHat6.5安装zookeeper单机

    版本号: Redhat6.5  zookeeper-3.4.6  JDK1.8 zookeeper下载 官网下载地址:https://mirrors.tuna.tsinghua.edu.cn/apac ...

  10. oracle删除表垃圾

    1,完全删除表: drop table 表名 purge; 2,删除表后永久删除-回收站表 purge table 表名: 3,清空垃圾回收站 purge recyclebin; 4, 查询所有此类表 ...