// 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. if-else练习

    练习1 import java.util.Scanner; public class V{ public static void main(String[] args){ Scanner s=new ...

  2. 容器(container)

    一.容器有哪些 平时我们经常看到各种容器名称:Servlet容器.WEB容器.Java WEB容器.Java EE容器等 二.容器是什么 2-1     容器通常理解就是装东西的,我们这里说技术上的容 ...

  3. Go Example--for循环

    package main import "fmt" func main() { i := 1 //Go循环只有for, 第一种循环方式 for i<=3 { fmt.Prin ...

  4. JS中map和foreach的区别以及some和every的用法

    一.原生JS forEach()和map()遍历 共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前 ...

  5. 几种常见的微服务架构方案简述——ZeroC IceGrid、Spring Cloud、基于消息队列

    微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合 ...

  6. mysql优化查询

    使用索引查询 MariaDB [test]> explain select * from te where id=22; #在没有增加索引情况下,rows为7,即查询行数 +------+--- ...

  7. MySQL--字符集参数

    ================================================== MySQL字符集相关参数 character_set_client: 表示客户端请求数据的字符集 ...

  8. ORM 创建manytomay的三种方法 反向查询 和一些 双下方法版学员管理系统3

    老师信息管理   三种创建多对对外键的方式常用第二种和第三种 思考 三种方式创建多对多外键方式及其优缺点. 外键的查询和使用 1外键的创建: 在数据库表中的表现形式 如何连表查询和使用 表里边:  s ...

  9. sqler sql 转rest api javascript 试用

    sqler 内嵌了一个js 引擎的实现(基于goja,当我们配置了exec的配置之后 调用宏(redis 接口)或者rest api 的时候会有一个全局变量$result ,保存了执行的结果,我们可以 ...

  10. 围棋术语 & 中英文 。

    https://senseis.xmp.net/?ChineseGoTerms 一字 二字 三字 四字 一字 长(nobi,solid extension),是指仅靠着自己的棋盘上已有棋子继续向前延伸 ...