OK,现在来把关机小程序的定时功能的代码贴出来并与大家分享一下心得。

 

首先,其实写这个玩意总共从开始写到写完并调试成功,只花了3个小时时间。为甚毛还是拖了4天嘞?主要是因为前面3天找资料完全找错了方向,这些内容我们待会再说,先看代码。

 

   
   
   
   
  1. #include  
  2. #include  
  3. #include  
  4. using namespace std; 
  5.  
  6. int Time_Tick() 
  7.     SYSTEMTIME sys_time; 
  8.     GetLocalTime(&sys_time); 
  9.     cout<<"now the time is:"<"\n"
  10.  
  11.  
  12.     time_t time_now,time_all,time_user_H,time_user_M,time_user_S; 
  13.  
  14.     cout<<"your time...\n"
  15.     cout<<"Hour:"
  16.     cin>>time_user_H; 
  17.     cout<<"Minute:"
  18.     cin>>time_user_M; 
  19.     cout<<"Second:"
  20.     cin>>time_user_S; 
  21.     time_now=time(NULL); 
  22.     time_all=time_user_H*3600+time_user_M*60+time_user_S+time_now; 
  23.  
  24. LOOP: 
  25.     time_now=time(NULL); 
  26.     if(time_now == time_all) 
  27.     { 
  28.         return 1; 
  29.     }else 
  30.     { 
  31.         goto LOOP; 
  32.     } 

以上是全部代码,我们现在分小块来分析。

 

首先,大家注意到我所用到的时间相关函数有如下几个

第一

   
   
   
   
  1. SYSTEMTIME sys_time; 
  2. GetLocalTime(&sys_time); 

第二

   
   
   
   
  1. time_t time_now,time_all,time_user_H,time_user_M,time_user_S; 
  2.  
  3. time_now=time(NULL); 

我们来分析,第一段代码中是使用了api来获取系统的当前时间,第二段代码中,是使用time(),也同样获取当前的系统时间,返回的结果是一个time_t类型,是一个大整数,不过其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。所以,大家可以单独写一个小程序来做个试验,time()函数输出的是一个很大的数字。需要注意的是,要使用time()函数和time_t这个变量声明符需要在前面添加#include (用于C语言编程中)或者#include (用于C++编程中)。还是那句老话:更多详细信息,请查阅最新版MSDN

 

再来看看是怎样实现定时的吧,注意以下代码:

   
   
   
   
  1. time_t time_now,time_all,time_user_H,time_user_M,time_user_S; 
  2.  
  3.     cout<<"your time...\n"
  4.     cout<<"Hour:"
  5.     cin>>time_user_H; 
  6.     cout<<"Minute:"
  7.     cin>>time_user_M; 
  8.     cout<<"Second:"
  9.     cin>>time_user_S; 
  10.     time_now=time(NULL); 
  11.     time_all=time_user_H*3600+time_user_M*60+time_user_S+time_now; 
  12.  
  13. LOOP: 
  14.     time_now=time(NULL); 
  15.     if(time_now == time_all) 
  16.     { 
  17.         return 1; 
  18.     }else 
  19.     { 
  20.         goto LOOP; 
  21.     } 

这部分就是定时功能的实现,我们来分析一下吧:用time_user_H、time_user_M、time_user_S三个来获取用户需要设置的时间,然后,time_now用来获取系统当前时间,time_all用于算出触发事件时的系统时间然后相应的将用户预设时间中的小时分秒都换算为秒。在LOOP中,不断获取系统时间,不断与time_all比较,当两者相等时,则触发事件。OK,程序逻辑就是这样。效率自然不用说,相当的低,如果哪位朋友有更好的想法,更高效的写法,也希望分享一下,我也是个喜欢狂热的榨取系统资源的人,在此先谢过了~。

 

好了,需要注意的地方就讲完了,就这么简单,真的就这么简单。那么前面问到的那个问题:为甚毛我用了4天多的功夫呢?答案是:找错了方向。我一开始只想到寻找现成的函数,不过多方咨询后得到答案:没有现成的用于定时触发时间的函数,需要自己实现。所以这才转移方向。希望的大家吸取我这个教训,在长期寻觅无果的情况下,不放换个角度来实现。其实事情也很简单。

 

当然,如果有朋友知道某个现成的函数能够实现定时触发事件这个功能,也望不吝赐教。下一步计划实现网络流量监控的功能模块。以我的尿性来看,没有半个月拿不下来,大家且待吧。