我們知道,system.threading.timer可以定時每隔一段時間執行一次任務。
不知道大家有沒有想過,如果任務執行時間比較長,interval到期之後會發生什麼;是會結束當前的執行緒,還是會重新啟動乙個執行緒?
下面**我們模擬一下,任務執行時間5s, interval=2s的運**況:
從截屏裡我們看到,2s 時間間隔到期之後,系統除了原始執行緒之外,會新建立其它執行緒(原始執行緒:11;新執行緒:12,13)。這是我們期望的嗎?恐怕大部分情況下不是。
我們期望的是:即使2s的時間間隔到期,系統需要等待當前任務執行完畢之後,再重新啟動乙個新的執行週期,期間不必建立新的執行緒。
我們做的第乙個嘗試是:為timer物件設定autoreset=false,之後在elapsed方法的最後,重新啟動timer,進入新的執行週期。
autoreset屬性的說明如下:timer should raise the system.timers.timer.elapsed event only once (false) or repeatedly (true)。預設情況下這個值是true,也就是會不間斷的觸發elapsed方法;false的意思是只觸發一次elapsed方法。
完整**如下:
從截屏裡我們看到,2s 時間間隔到期之後,系統沒有建立新的執行緒;待當前執行緒執行完畢之後;又重新開始了新的執行週期,與我們期望的相符。
但是,這就結束了麼? no,這太麻煩了,為此我們建立了乙個類:
using system.timers;
namespace timertest2
public cetimer(double interval)
public void initializetimer()
public void initializetimer(double interval)
public void close()
public void start()
public void stop()
private void internalelapsed(object sender, elapsedeventargs e)}}
用起來很方便,不用考慮設定autoreset,不用重新啟動執行週期。你只需要考慮時間間隔,和你需要執行的方法。
呼叫示例如下:
using system;
using system.timers;
namespace timertest2
static void ct_elapsed(object sender, elapsedeventargs e)}}
}
以上。 TOMCAT中的乙個問題
這兩天在客戶端部署bo報表系統遇到乙個奇怪問題,tomcat啟動面板打出來的日誌資訊埠號為8181,但我在server.xml檔案裡面已經將埠號改為了8107,但為什麼會是8181呢!真是一頭霧水。用ue在tomcat目錄下所有檔案裡面都搜了一遍字元為 8181 的檔案,但乙個也找不到。這個8181...
qt中的乙個問題
1 這是我在看qt的乙個pdf的時候遇到的問題。如下 mydlg my1 if my1.exec qdialog accepted 其中在my1上有乙個button,w為乙個widget,button的clicked訊號,對應了my1的recept 槽。剛學qt死活看不懂這句話 現在好像大概明白了點...
開發中的乙個問題
在使用者進來之後,當使用者進行第一次請求的時候 可能是由於伺服器配置問題,tomact和nginx兩次 後出現這個問題,會莫名其妙先請求http的乙個請求然後重定向報錯。我反應了很久,幾個架構也找不到解決方案。但這個問題是很有規律性的。1.出現在第一次請求介面的時候,第二次就是一定是好的。2 出現在...