C++ 定时作业

定时器设置定时运行:


#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值