TIMER控制元件只能設定間隔值也就是interval設為300000是5分鐘,但是沒法指定具體的時間。請問下我想寫個程式到時候給客戶他只需要運行后就掛在服務器上就每天9點到3點固定每隔5分鐘執行一段插入資料庫的程式,該如何實作謝謝大家,非常急
uj5u.com熱心網友回復:
頂下自己的帖子。謝謝大家的幫忙!uj5u.com熱心網友回復:
TIMER設定值后,可以定時判斷下09:00<當前時間<15;00,來執行以下操作呀。uj5u.com熱心網友回復:
每隔5分鐘取一次時間,如果時間在9-3點之間,就執行操作uj5u.com熱心網友回復:
interval還是默認為1000Timer1Timer事件:
var
D:TDateTime;
H,T:string;
begin
D:=Now;
H:=Formatdatetime('HH',D);
T:=Formatdatetime('HHNN',D);
if (H>'09') and (H<'15') and (StrToInt(T) Mod 5 =0) then
begin
Timer1.Enabled:=False;
//執行代碼,執行結束后再設定Enabled=True;
end;
end;
uj5u.com熱心網友回復:
程式時刻獲取當前系統時間,當var
cur_time:Tdatetime;
Tem_time:Tdatetime;
begin
if (formatdatetime('mm:dd:ss',now)>'09:00:00') and
(formatdatetime('mm:dd:ss',now)<'15:00:00') then
begin
cur_time:=now;
if datediff(s,cur_time,temp_date)=5 then
begin
temp_date=cur_time;
insertdatatoDB();
end;
end;
end;
uj5u.com熱心網友回復:
用DateDiff()函式吧。描述
回傳兩個日期之間的時間間隔。
語法
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
DateDiff 函式的語法有以下引數:
引數 描述
interval 必選。字串運算式,表示用于計算 date1 和 date2 之間的時間間隔。有關數值,請參閱“設定”部分。
date1, date2 必選。日期運算式。用于計算的兩個日期。
firstdayofweek 可選。指定星期中第一天的常數。如果沒有指定,則默認為星期日。有關數值,請參閱“設定”部分。
firstweekofyear 可選。指定一年中第一周的常數。如果沒有指定,則默認為 1 月 1 日所在的星期。有關數值,請參閱“設定”部分。
設定
interval 引數可以有以下值:
設定 描述
yyyy 年
q 季度
m 月
y 一年的日數
d 日
w 一周的日數
ww 周
h 小時
m 分鐘
s 秒
uj5u.com熱心網友回復:
寫一個插入的程式。用計劃任務設定這個程式。
uj5u.com熱心網友回復:
問下4樓為什么在TIME>9小于15的時候Timer1.Enabled:=False然后執行完代碼后再將timer1.Enabled:=true。。呢。uj5u.com熱心網友回復:
明顯使用計劃任務好
uj5u.com熱心網友回復:
請問下這個程式改成早上9點到11點半,下午1點半到3點執行插入如何修改。謝謝拉。uj5u.com熱心網友回復:
正確的做法是由 計劃任務 來調度exe否則,exe要一直運行著,再通過timer每秒判斷當前的時間,是指定時間了,再執行需要的代碼函式
uj5u.com熱心網友回復:
一直開著EXE倒無所謂,放在服務器上。最好代碼能寫吧。不然萬一程式又要放到其他的地方。uj5u.com熱心網友回復:
萬一在interval之內執行不完怎么辦?
uj5u.com熱心網友回復:
除計劃任務外,CreateWaitableTimer/SetWaitableTimer來完成這種長周期的定時例程.
用當前時間計算下一次的時間間隔(相對時間)并SetWaitableTimer,然后就是等待信號,信號到了,時間準沒錯.誤差不會超過1秒的
或者直接用SetWaitableTimer設定下一次的絕對時間,然后就是等信號.
而且據說可以讓計算機恢復待機(這個我沒試過...)
uj5u.com熱心網友回復:
問一句:待機時有沒程式在運行?uj5u.com熱心網友回復:
若條件成立,則Enabled變False了,Timer就不起作用了,那里還有interval可言...
執行完代碼再啟用,這有何問題呢???
uj5u.com熱心網友回復:
哦,我看錯了,不好意思...我以為是針對我的回答的,原來你是回復樓主的疑問
uj5u.com熱心網友回復:
是不是可以注冊一個管理服務程式,然后呼叫相應的服務,已WINDOWS管理程式的身份后臺運行,另外同你執行的程式有關,有界面還是無界面?是控制臺程式還是網路傳輸程式等。uj5u.com熱心網友回復:
任務計劃啊uj5u.com熱心網友回復:
任務計劃是標準解決方案,你想自己檢測時間,或者開個服務也都是可以的(任務計劃本身就是svchost的服務之一),沒什么原則性的不同。uj5u.com熱心網友回復:
使用TIMER即可。上述都有代碼。uj5u.com熱心網友回復:
這才是正解
uj5u.com熱心網友回復:
辦法有很多。比較簡單的做法是用2個Timer,一個用于判斷時間當前時間,時間是9點到3點的時間,判斷timer2是否是true,不是的話就設定為true。其他時間久判斷timer2是否是false,不是false就設定false。
uj5u.com熱心網友回復:
任務計劃比較靠譜uj5u.com熱心網友回復:
請問下這個程式改成早上9點到11點半,下午1點半到3點執行插入如何修改是不是這樣修改
interval還是默認為1000
Timer1Timer事件:
var
D:TDateTime;
H,T:string;
begin
D:=Now;
H:=Formatdatetime('HHNN',D);
T:=Formatdatetime('HHNN',D);
if (H>'0900') and (H<'1130') and (StrToInt(T) Mod 5 =0) then
begin
Timer1.Enabled:=False;
//執行代碼,執行結束后再設定Enabled=True;
end;
if (H>'0130') and (H<'0300') and (StrToInt(T) Mod 5 =0) then
begin
Timer1.Enabled:=False;
//執行代碼,執行結束后再設定Enabled=True;
end;
end;
uj5u.com熱心網友回復:
寫2個執行緒:一個專門的執行緒回圈往資料庫插資料,并且要能接收訊息。
另一個執行緒用于判斷當前是否在指定的時間內。然后把結果通過訊息發給哪個插資料執行緒。
uj5u.com熱心網友回復:
如果使用定時器,哪說明你是個初級程式員。uj5u.com熱心網友回復:
執行周期可用組態檔或資料庫解決,可以為它寫一個專門的處理配置的類。uj5u.com熱心網友回復:
如果你是放在服務器上的,可以用作業系統的任務執行如果是客戶端,那就按上面大伙說的吧。
uj5u.com熱心網友回復:
辦法都有效,只是看效率了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/151879.html
標籤:網絡通信/分布式開發
