using
system;
using
system.collections.generic;
using
system.io;
using
system.text.regularexpressions;
using
system.threading;
namespace
microsoft.timerservice
///
/// 是否啟用定時器
///
private
bool
_enabledtimer =
true
; ///
/// 定時器配置
///
servicetimeconfig config;
#endregion
///
/// 停止
///
public
void
stop()
///
/// 開始服務
///
public
void
start()
///
/// 處理間隔服務
///
///
private
void
timerprocess(
object
sender )
try}
catch
( exception ex )
// 處理服務執行過程中出現的異常
finally
else
// 定時設定
} } }
///
/// 開始服務
///
protected
abstract
void
startservice();
///
/// 定時器初始化
///
///
///
///
protected
abstract
servicetimeconfig gettimerconfig();
///
/// 系統服務錯誤
///
///
protected
virtual
void
serviceexception( exception ex )
} #region 系統配置實體類
///
/// 服務定時器配置
///
public
class
servicetimeconfig
///
/// starttime值為:
///
/// timermode=timermode.month "09|04:30" -表示每月9號的凌晨4點30分
/// timermode=timermode.week "0|04:30" -表示每星期天的4點30分
/// timermode=timermode.week "6|04:00" -表示每星期6的4點30分
/// timermode=timermode.day "|04:00" -表示每天的4點00分
/// timermode=timermode.date "08-10|04:00" -表示每年8月10號的4點00分執行一次
/// timermode=timermode.year "246|04" -表示每年第246天的4點00分執行一次(可以不填寫分鐘預設為00)
///
public
string
starttime
///
/// 伺服器定時處理模型
///
public
timermode timermode
} ///
/// 服務處理方法
///
public
enum
timermode
#endregion
#region 定時服務休眠計算類
///
/// 檔案生成時間配置
///
public
class
timercontrol
)?/|(?[01]?/d|2[0-3])(?::(?[0-5]/d?))?$"
, regexoptions.compiled | regexoptions.ignorecase );
this
.type = timemode;
match m = regex.match( starttime );
if( m.success )
else
throw
newexception(
"定時器時間配置異常!"
);
} ///
/// 判斷時間是否到了
///
///
public
bool
timeisup
return
false
; }
} ///
/// 從現在起到下次時間到還有多少時間
///
///
public
timespan getnexttimeup()
timespan nextcrtfiletime = dt - datetime.now;
if( (
int)nextcrtfiletime.totalmilliseconds >
int.maxvalue )
// 如果要休眠的時間間隔超過int型別可以表示的毫秒時,先休眠到int.maxvalue,然後再次休眠
nextcrtfiletime = new
timespan(
int.maxvalue );
return
nextcrtfiletime;
} #endregion
} #endregion
} 下面使用例項
using
system;
using
system.collections.generic;
using
system.io;
using
system.text.regularexpressions;
using
system.threading;
namespace
microsoft.timerservice
protected
override
servicetimeconfig gettimerconfig()
///
/// 當服務出錯時,處理
///
///
protected
override
void
serviceexception(exception ex)
} } //然後在onstart方法裡 這樣就可以了
testservice testservice = new
testservice();
testservice.start();
定時器的封裝
定時器的封裝可以通知窗體,可以不通知窗體。1 定義 typedef void callback timerproc hwnd hwnd,uint umsg,uint ptr idevent,dword dwtime class cmytimer 2 實現 cmytimer cmytimer bool...
定時器 函式封裝
一 return返回值 1 函式 括號 2 所有函式預設返回值 未定義 3 return後任何 都不執行 二 定時器 1.setinterval 1 是乙個實現定時呼叫的函式 2 setinterval 函式,毫秒 重複執行 3 clearinerval 清除 2.settimeout 1 只執行一...
關於定時器
定時器是個很有意思的東西,它很有用,但我認為這不是現代計算機的結構所擅長的事情。計算機適合做那些很大量的簡單重複工作,或者根據請求做出回應。dos時代是沒有程序執行緒等概念的,那時候要想做到定時真是有些麻煩 通常的做法是死迴圈不斷監測時間,發現時間到了就做特定的事情 當然你可以用delay,來指定等...