20170716Windows11_3_可等待计时器对象
来源:互联网 发布:淘宝开店名字可以改吗 编辑:程序博客网 时间:2024/06/05 08:59
可等待计时器对象:
可等待计时器对象(1):
1:在开发的时候可能需要:在某些时间点上启动某个线程,按照某种规律来进行线程的启动。Event对象可以决定顺序,但不能帮我们频繁启动线程。
2:可等待计时器对象(WaitableTimer):可以使用CreateWaitableTimer()函数来创建一个可等待计时器对象。
3:CreateWaitableTimer参数:
HANDLE WINAPI CreateWaitableTimer( _In_opt_ LPSECURITY_ATTRIBUTES lpTimerAttributes,//安全指针 _In_ BOOL bManualReset,//是否为认为置位 _In_opt_ LPCTSTR lpTimerName//定时器名称);
4:Ex版本与之的差别是多了一个访问权限的控制。
5:可等待计时器对象被创建好后默认是无信号状态的,因此,一开始就WaitForSingleObject会反悔WAIT_TIMEOUT。使用SetWaitableTimer可以使之变为有信号状态。
6:SetWaitableTimer:
BOOL WINAPI SetWaitableTimer( _In_ HANDLE hTimer,//可以通过CreateWaitableTimer或者Open...得到。 _In_ const LARGE_INTEGER *pDueTime,//以100ns为单位,为FILETIE。到这个时刻,信号才会被触发。 _In_ LONG lPeriod,//每过多久再次启动一次信号,是一个事件间隔。时间单位是ms。 _In_opt_ PTIMERAPCROUTINE pfnCompletionRoutine, _In_opt_ LPVOID lpArgToCompletionRoutine, _In_ BOOL fResume);
可等待计时器对象(2)——自动和手动:
1:一般情况下,可等待计时器对象会使用自动方式,最重要的是我们需要设定的那个时间。
#include <windows.h>#include <tchar.h>int main(){HANDLE hTimer = CreateWaitableTimer(nullptr, TRUE, nullptr);LARGE_INTEGER liDueTime;liDueTime.LowPart = -10000000LL;//1SSetWaitableTimer(hTimer, &liDueTime, 1000, nullptr, nullptr, FALSE);if (WaitForSingleObject(hTimer, 1020) == WAIT_TIMEOUT)_tprintf(TEXT("Time out..."));else_tprintf(TEXT("Signal..."));return 0;}
可等待计时器对象(3)——APC回调:
1:SetWaitableTimer:
#include <windows.h>#include <tchar.h>VOID CALLBACK TimerAPCProc(_In_opt_ LPVOID lpArgToCompletionRoutine,_In_ DWORD dwTimerLowValue,_In_ DWORD dwTimerHighValue){}int main(){HANDLE hTime = CreateWaitableTimer(nullptr, TRUE, nullptr);LARGE_INTEGER li = { 0 };SetWaitableTimer(hTime, &li, 1000, TimerAPCProc, nullptr, FALSE);SleepEx(INFINITE, TRUE);//之后将会调用APC里面的函数。return 0;}
2:上面代码可以将SetWaitableTimer的线程里面把要执行的回调函数押入到调用线程的APC栈里面(线程空闲下来之后会调用APC里面的函数),长这样的方式一般用的很少。特别注意的是,他压入的是调用SetWaitableTimer的这个线程的栈。而不是外面等待的那个线程的栈。
阅读全文
0 0
- 20170716Windows11_3_可等待计时器对象
- 可等待的计时器内核对象
- 内核对象--可等待计时器WaitableTimer(一)
- 内核对象--可等待计时器WaitableTimer(二)
- 多线程 -- 可等待的计时器内核对象
- 可等待计时器
- 可等待的计时器
- 白话windows多线程同步之可等待计时器内核对象
- 可等待计时器内核对象的使用(CreateWaitableTimer)
- windows核心编程-可等待的计时器内核对象
- Chapter09-“内核模式下的线程同步”之可等待的计时器内核对象
- 线程同步——内核对象(互斥、事件、信号量、可等待计时器)
- 可等待的计时器与APC调用
- JavaScipt可控制计时器
- .NET Framework计时器对象
- window对象--JavaScript 计时器
- 线程同步之可等的计时器
- js实现可刷新的简易计时器
- hadoop学习笔记--9.HBase基础
- JavaScript学习(五)
- java线程组
- Linux学习——shell编程之正则表达式和字符处理命令
- V分身
- 20170716Windows11_3_可等待计时器对象
- 《neural network and deep learning》题解——ch03 过度拟合&规范化&权重初始化
- Android App应用调用已安装市场,进行软件评分的功能代码实现
- poj 2443 Set Operation (bitset用法
- leetcode题解-328. Odd Even Linked List && 19. Remove Nth Node From End of List
- 《小白兔到大黑牛》第十篇锁机制基础知识
- Python中的列表、元组
- HDU5037-贪心(很好)-Frog
- connect/select超时, 三次握手就一定不能建立吗? 非也非也