關於伺服器定時器的封裝

2021-07-04 08:02:29 字數 3798 閱讀 7406

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,來指定等...