OK,現在來把關機小程序的定時功能的代碼貼出來並與大家分享一下心得。
首先,其實寫這個玩意總共從開始寫到寫完並調試成功,只花了3個小時時間。為甚毛還是拖了4天嘞?主要是因為前面3天找資料完全找錯了方向,這些內容我們待會再說,先看代碼。
- #include <windows.h>
- #include <ctime>
- #include <iostream>
- using namespace std;
- int Time_Tick()
- {
- SYSTEMTIME sys_time;
- GetLocalTime(&sys_time);
- cout<<"now the time is:"<<sys_time.wHour<<sys_time.wMinute<<sys_time.wSecond<<"\n";
- time_t time_now,time_all,time_user_H,time_user_M,time_user_S;
- cout<<"your time...\n";
- cout<<"Hour:";
- cin>>time_user_H;
- cout<<"Minute:";
- cin>>time_user_M;
- cout<<"Second:";
- cin>>time_user_S;
- time_now=time(NULL);
- time_all=time_user_H*3600+time_user_M*60+time_user_S+time_now;
- LOOP:
- time_now=time(NULL);
- if(time_now == time_all)
- {
- return 1;
- }else
- {
- goto LOOP;
- }
- }
以上是全部代碼,我們現在分小塊來分析。
首先,大家注意到我所用到的時間相關函數有如下幾個
第一
- SYSTEMTIME sys_time;
- GetLocalTime(&sys_time);
第二
- time_t time_now,time_all,time_user_H,time_user_M,time_user_S;
- time_now=time(NULL);
我們來分析,第一段代碼中是使用了api來獲取系統的當前時間,第二段代碼中,是使用time(),也同樣獲取當前的系統時間,返回的結果是一個time_t類型,是一個大整數,不過其值表示從CUTCoordinated Universal Time)時間1970年1月1日00:00:00稱為UNIX系統的Epoch時間)到當前時刻的秒數。所以,大家可以單獨寫一個小程序來做個試驗,time()函數輸出的是一個很大的數字。需要注意的是,要使用time()函數和time_t這個變量聲明符需要在前面添加#include <time.h>用於C語言編程中)或者#include <ctime>用於C++編程中)。還是那句老話:更多詳細信息,請查閱最新版MSDN
再來看看是怎樣實現定時的吧,注意以下代碼:
- time_t time_now,time_all,time_user_H,time_user_M,time_user_S;
- cout<<"your time...\n";
- cout<<"Hour:";
- cin>>time_user_H;
- cout<<"Minute:";
- cin>>time_user_M;
- cout<<"Second:";
- cin>>time_user_S;
- time_now=time(NULL);
- time_all=time_user_H*3600+time_user_M*60+time_user_S+time_now;
- LOOP:
- time_now=time(NULL);
- if(time_now == time_all)
- {
- return 1;
- }else
- {
- goto LOOP;
- }
這部分就是定時功能的實現,我們來分析一下吧:用time_user_H、time_user_M、time_user_S三個來獲取用戶需要設置的時間,然後,time_now用來獲取系統當前時間,time_all用於算出觸發事件時的系統時間然後相應的將用戶預設時間中的小時分秒都換算為秒。在LOOP中,不斷獲取系統時間,不斷與time_all比較,當兩者相等時,則觸發事件。OK,程序邏輯就是這樣。效率自然不用說,相當的低,如果哪位朋友有更好的想法,更高效的寫法,也希望分享一下,我也是個喜歡狂熱的搾取系統資源的人,在此先謝過了~。
好了,需要注意的地方就講完了,就這麼簡單,真的就這麼簡單。那麼前面問到的那個問題:為甚毛我用了4天多的功夫呢?答案是:找錯了方向。我一開始只想到尋找現成的函數,不過多方咨詢後得到答案:沒有現成的用於定時觸發時間的函數,需要自己實現。所以這才轉移方向。希望的大家吸取我這個教訓,在長期尋覓無果的情況下,不放換個角度來實現。其實事情也很簡單。
當然,如果有朋友知道某個現成的函數能夠實現定時觸發事件這個功能,也望不吝賜教。下一步計劃實現網絡流量監控的功能模塊。以我的尿性來看,沒有半個月拿不下來,大家且待吧。
本文出自 “貓窩” 博客,請務必保留此出處http://moowoo.blog.51cto.com/2665885/537783