定时器设置定时运行:
#include "stdafx.h"
#include "afx.h"
#include <iostream>
using namespace std;
int main()
{
int h=2,m=30; //每天2:30运行
HANDLE hTimer;
time_t nowtime = time(0);
struct tm *ptr1,*ptr2;
ptr1=localtime(&nowtime);
if(ptr1->tm_hour > h ) //时间过了第一次运行时间为第二天
{
nowtime += 60*60*24;
}
else if(ptr1->tm_min > m)
{
nowtime += 60*60*24;
}
ptr2=localtime(&nowtime);
SYSTEMTIME st;
st.wYear = ptr2->tm_year + 1900;
st.wMonth = ptr2->tm_mon + 1;
st.wDay = ptr2->tm_mday;
st.wHour = h;
st.wMinute = m;
st.wSecond = 0;
st.wMilliseconds =0;
st.wDayOfWeek = ptr2 ->tm_wday;
FILETIME ftLocal,ftUTC;
LARGE_INTEGER liUTC;
hTimer = CreateWaitableTimer(NULL,FALSE,NULL);
SystemTimeToFileTime(&st,&ftLocal);
LocalFileTimeToFileTime(&ftLocal,&ftUTC);
liUTC.LowPart = ftUTC.dwLowDateTime;
liUTC.HighPart = ftUTC.dwHighDateTime;
SetWaitableTimer(hTimer,&liUTC,3*1000,NULL,NULL,FALSE);
char time0[200];
sprintf(time0,"[MSG]初始化同步时间:%04d-%02d-%02d %02d:%02d:%02d/r/n",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
cout<<time0;
while(1)
{
DWORD wt = WaitForSingleObject(hTimer,INFINITE);
if( WAIT_OBJECT_0 == wt )
{
SYSTEMTIME startt;
GetLocalTime(&startt);
char time[200];
sprintf(time,"%04d-%02d-%02d %02d:%02d:%02d::%d/r/n",startt.wYear,startt.wMonth,startt.wDay,startt.wHour,startt.wMinute,startt.wSecond,startt.wMilliseconds);
cout<<time;
//...........作业函数
SYSTEMTIME endt;
GetLocalTime(&endt);
char time3[200];
sprintf(time3,"%04d-%02d-%02d %02d:%02d:%02d::%d/r/n",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond,st.wMilliseconds);
cout<<time3;
}
}
CloseHandle(hTimer);
return 0;
}