1. 程式人生 > >多執行緒庫SCoop應用 之 時鐘(計時器)

多執行緒庫SCoop應用 之 時鐘(計時器)

使用該庫的【時鐘(又叫:計時器)】功能,首先要做三件事:

第二:setup函式裡,呼叫mySCoop.start()命令
void setup() {
mySCoop.start();
}

第三:loop函式裡,呼叫yield()命令
void loop() {
yield();
}

接下來就可以使用【時鐘】了。有兩種定義方式,請繼續往下看:
1、完整定義:定義執行緒的【setup】和【run】兩個函式。
定義一個名字為“Tmr”的時鐘:
defineTimer(Tmr,1000); //用defineTimer定義一個時鐘,名為Tmr,週期為1000ms
void Tmr::setup() //定義該時鐘的setup()函式,用於初始化設定。
{
//這裡是時鐘的setup函式的內容
}
void Tmr::run() //定義該時鐘的run()函式,用於執行週期事件。
{
//這裡是時鐘的run函式的內容
}

2、快速定義:僅定義時鐘的run函式
如果這個時鐘不需要初始化setup,只需要週期事件run的話,可以直接使用defineTimerRun()快速定義該執行緒任務,如下:
defineTimerRun(Tmr,1000) //用defineTimerRun定義一個時鐘,名為Tmr,週期為1000ms
{
//小技巧,如果某條件下,此時暫不需要執行週期事件,只需要在第一句返回,return 即可。可以用全域性變數作為參考,從程式外部進行控制。
//這裡是時鐘的run函式的內容
//小技巧:如果此時需要動態修改時鐘週期,只需要 schedule(新週期) 即可。可以用全域性變數作為參考,從程式外部進行控制。
}

注意一點,使用此庫之後,請使用sleep(ms)作為延時,不要用delay()了。
因為sleep(ms)只針對當前執行緒。而delay(ms)是針對全域性的。

程式碼就不寫了,參考 【Arduino - 多執行緒庫SCoop應用 之 任務】。