windows多线程同步机制---可等候定时器
来源:互联网 发布:mac添加农历 编辑:程序博客网 时间:2024/05/22 15:27
1 可等候定时器
是一个更加精确系统提供的定时器.能够达到100ns级别. 可以被等候,也可以通过APC回调函数的方式触发
2 定时器的使用
2.1 创建定时器
HANDLE CreateWaitableTimer(LPSECURITY_ATTRIBUTES lpTimerAttributes,
//安全属性
BOOL bManualReset,//重置方式
LPCTSTR lpTimerName //命名
);
返回创建好的定时器的句柄
2.2 设置定时器
BOOL SetWaitableTimer(HANDLE hTimer, //定时器句柄
const LARGE_INTEGER *pDueTime,
//定时器第一次触发的时间,100ns级别(64位整数)
LONG lPeriod,
//后续每次触发的间隔,毫秒级别
PTIMERAPCROUTINE pfnCompletionRoutine,
//APC(异步调用,优先消息队列)处理函数
LPVOID lpArgToCompletionRoutine,
//APC参数
BOOL fResume ); //休眠标识
pDueTime - 正值,表示绝对时间
负值,表示相对于现在的时间间隔
lPeriod - 0 定时器不再有后续触发
大于0 按照间隔触发
pDueTime | lPeriod | lPeriod ....
2.3 等候定时器
WaitForSingleObjectWaitForMultipleObjects
2.4 关闭定时器
CloseHandle2.5 APC定时器(高优先级队列,异步调用,即使程序僵死,依然可以调用该消息队列处理函数来处理消息)
VOID CALLBACK TimerAPCProc(LPVOID lpArgToCompletionRoutine // data value
DWORD dwTimerLowValue // timer low value
DWORD dwTimerHighValue // timer high value
);
2.6 其他
OpenWaitableTimer 打开CancelWaitableTimer 取消
SleepEx();
// WaitableTimer.cpp : Defines the entry point for the console application.//#include "stdafx.h"#define _WIN32_WINNT 0x0400#include "windows.h"HANDLE g_hTimer = NULL;DWORD WINAPI TimerThread( LPVOID pParam ){while( 1 ){WaitForSingleObject( g_hTimer, INFINITE );printf( "Hello Timer\n" );}return 0;}void Create( ){//创建定时器g_hTimer = CreateWaitableTimer(NULL, FALSE, NULL );//设置定时器UINT64 nDueTime = -100000000;SetWaitableTimer( g_hTimer, (PLARGE_INTEGER)&nDueTime, 1000,NULL, NULL, FALSE );//创建等候线程DWORD dwThreadID = 0;HANDLE hThread = CreateThread( NULL, 0,TimerThread, NULL, 0, &dwThreadID );WaitForSingleObject( hThread, INFINITE );//关闭定时器CloseHandle( g_hTimer );}VOID CALLBACK TimerProc( LPVOID lpArgToCompletionRoutine, DWORD dwTimerLowValue, DWORD dwTimerHighValue ) {printf( "------APC TimerProc--------\n" );}void APCTimer( ){//创建定时器HANDLE hTimer = CreateWaitableTimer(NULL, FALSE, NULL );//设置定时器UINT64 nDueTime = -10000000;SetWaitableTimer( hTimer, (PLARGE_INTEGER)&nDueTime, 1000,TimerProc, NULL, FALSE );//while( 1 ){SleepEx( -1, TRUE );}//关闭句柄CloseHandle( hTimer );}int main(int argc, char* argv[]){//Create( );//等候定时器APCTimer( );//回调函数方式触发return 0;}
0 0
- windows多线程同步机制---可等候定时器
- 使用可等候定时器进行windows 线程同步 waitabletimer
- Windows编程基础 第十五章 线程局部存储 线程同步 原子锁 临界区 事件 互斥量 信号量 可等候定时器
- windows多线程同步机制
- windows多线程同步机制---事件
- windows多线程同步机制---信号量
- windows多线程同步机制---互斥量
- windows多线程同步机制---原子锁
- windows多线程同步机制---临界区
- 白话windows多线程同步之可等待计时器内核对象
- 同步多线程的同步机制
- java多线程同步机制
- 多线程同步机制摘要
- 多线程同步机制摘要
- Linux多线程同步机制
- 多线程的同步机制
- Linux多线程同步机制
- 多线程同步机制
- CentOS虚拟机环境下安装JDK环境
- Visual Studio 2008试用版的评估期已经结束
- Android系统移植(四)
- 【转】AS技巧合集
- wamp相关问题
- windows多线程同步机制---可等候定时器
- hammer.js初识
- J2EE的13种核心技术
- c语言中argc与argv
- Java中的继承与组合
- ++,--运算符的使用
- gdb:如果在没有符号表的时候让gdb强制以thumb模式反汇编ARM二进制代码
- LVS调度算法(上)——静态调度算法
- zookeepr 杂讲