// WaitTimer.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#define _WIN32_WINNT 0x0400
#include "windows.h"
#include "conio.h"
HANDLE g_hTimer=NULL;
VOID CALLBACK TimerProc(LPVOID lpArgToCompletionRoutine,
DWORD dwTimerLowValue,DWORD dwTimerHighValue)
{
printf("-----APC Timer--------\n");
}
void APCTimer(){
HANDLE hTime=CreateWaitableTimer(NULL,false,NULL);
UINT64 nDueTime=-20000000;
//设置定时器每隔200毫秒执行一次
SetWaitableTimer(hTime,(PLARGE_INTEGER)&nDueTime,200,TimerProc,NULL,false);
//这里想说明的是APC的队列要优先于我们的消息队列
//我们现在吧MAIN函数给堵塞上了 可是程序还是会继续输出-----APC Timer--------
while(1){
SleepEx(-1,true);
}
CloseHandle(hTime);
}
DWORD WINAPI ThreadTimer(LPVOID pParam){
while(1){
WaitForSingleObject(g_hTimer,INFINITE);
printf("ThreadTimer----\n");
}
}
void CreateTimer(){
//创建定时器
g_hTimer=CreateWaitableTimer(NULL,false,NULL);
//设置定时器 时间
//设置一个定时器多久开始
UINT64 nDueTime=-20000000;
//设置定时器每隔200毫秒执行一次
SetWaitableTimer(g_hTimer,(PLARGE_INTEGER)&nDueTime,200,
NULL,NULL,false);
//创建等候线程
DWORD nID=0;
HANDLE hThread=CreateThread(NULL,0,ThreadTimer,NULL,0,&nID);
WaitForSingleObject(hThread,INFINITE);
//关闭定时器
CloseHandle(g_hTimer);
}
int main(int argc, char* argv[])
{
//CreateTimer();
APCTimer();
return 0;
}
创建定时器 和简单的了解了一下APC消息队列 14.4.29
最新推荐文章于 2016-05-31 09:51:19 发布