實用程式系列
這雖然現在有很多排程工具,都相當方便了,但如果有個任務特定時間指定執行某個方法和事件該怎麼做呢?
請參考以下範例
using System;
using System.Timers;
namespace TimerSample
{
class Program
{
static void Main(string[] args)
{
Timer timer = new Timer();
timer.Enabled = true;
timer.Interval = 1000; // 執行區隔時間,單位為毫秒; 60000/分鐘
timer.Start();
timer.Elapsed += new ElapsedEventHandler(test);
Console.ReadKey();
}
private static void test(object source, ElapsedEventArgs e)
{
Console.WriteLine("測試排程事件時間: " + DateTime.Now.ToString());
}
}
}
C#中,Timer是一個定時器,它可以按照你所指定的時間執行一個事件。
指定時間區隔是指按照特定時間,如每1分鐘、每10分鐘、每1個小時等執行特定時間;
如果要指定時間的話
class Program
{
static void Main(string[] args)
{
Timer timer = new Timer();
timer.Enabled = true;
timer.Interval = 60000; //每分鐘
timer.Start();
timer.Elapsed += new ElapsedEventHandler(test);
Console.ReadKey();
}
private static void test(object source, ElapsedEventArgs e)
{
if (DateTime.Now.Hour == 10 && DateTime.Now.Minute == 30) //10:30
Console.WriteLine("測試排程事件時間: " + DateTime.Now.ToString());
}
}
其實會延伸這類的想法是因為筆者以前有寫過股價機器人,用這樣方式來每時間區隔去抓取,YAHOO股價資料去比對資料,如果股價機器人知道便宜價的狀況下,就會通知我該買股票嚕,所以排程的實用性是相當實用的!
補充:那其他語言可不可以,當然可以嚕!
Pythons
import schedule
import time
def job():
print("I'm working...")
schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)
while True:
schedule.run_pending()
time.sleep(1)
上面的意思就是:
每十分鐘執行一次任務
每隔一小時執行一次任務
每天10:30執行一次任務
每周一執行一次任務
每周三13:15執行一次任務
元哥的筆記