go time包的定時器 斷續器

2021-08-10 23:07:09 字數 2767 閱讀 2525

from:

在time包中有兩個函式可以幫助我們初始化time.timer

初始化乙個到期時間據此時的間隔為3小時30分的定時器

t := time.newtimer(3*time.hour + 30*time.minute)

注意,這裡的變數t是*time.newtimer型別的,這個指標型別的方法集合包含兩個方法

通過定時器的字段c,我們可以及時得知定時器到期的這個事件來臨,c是乙個chan time.time型別的緩衝通道,一旦觸及到期時間,定時器就會向自己的c欄位傳送乙個time.time型別的元素值

示例一:乙個簡單定時器

package main

import (

"fmt"

"time"

)func main()

now time : 2015-10-31 01:19:07.210771347 +0800 cst.

expiration time: 2015-10-31 01:19:09.215489592 +0800 cst.

示例二:我們在改造下之前的那個簡單超時操作

package main

import (

"fmt"

"time"

)func main()

//單獨起乙個goroutine執行select

gofunc()else

//得知定時器到期事件來臨時,返回結果

return timer.c

}():

fmt.println("timeout.")

ok = false

break

}//終止for迴圈

if !ok

}}()

//慣用手法,讀取sign通道資料,為了等待select的goroutine執行。

<- sign

}

time.after函式, 表示多少時間之後,但是在取出channel內容之前不阻塞,後續程式可以繼續執行。鑑於after特性,其通常用來處理程式超時問題。

package main

import (

"fmt"

"time"

)func main()

}

timed out

示例三:自定義定時器

package main

import (

"fmt"

"time"

)func main()

t = time.afterfunc(1

*time.second, f)

//讓當前goroutine 睡眠2

s,確保大於內容的完整

//這樣做原因是,time.afterfunc的呼叫不會被阻塞。它會以一部的方式在到期事件來臨執行我們自定義函式f。

time.sleep(2 * time.second)

}

expiration time : 2015-10-31 01:04:42.579988801 +0800 cst.

c`s len: 0

第二行列印內容說明:定時器的字段c並沒有緩衝任何元素值。這也說明了,在給定了自定義函式後,預設的處理方法(向c傳送代表絕對到期時間的元素值)就不會被執行了。

結構體型別time.ticker表示了斷續器的靜態結構。

就是週期性的傳達到期時間的裝置。這種裝置的行為方式與僅有秒針的鐘錶有些類似,只不過間隔時間可以不是1s。

初始化乙個斷續器

var ticker *timeticker = time.newticker(time.second)

示例一:使用時間控制停止ticke

package main

import (

"fmt"

"time"

)func main()

}()ticker.stop()

fmt.println("ticker stopped")

}tick at

2015-10-31

01:29:34.41859284 +0800 cst

tick at

2015-10-31

01:29:35.420131668 +0800 cst

tick at

2015-10-31

01:29:36.420565647 +0800 cst

tick at

2015-10-31

01:29:37.421038416 +0800 cst

tick at

2015-10-31

01:29:38.41944582 +0800 cst

ticker stopped

示例二:使用channel控制停止ticker

package main

import (

"fmt"

"time"

)func main()

}()time.sleep(time.millisecond * 1500)

ticker.stop()

fmt.println("ticker stopped")

}

Mysql 檢視定時器 開啟定時器 設定定時器時間

1.檢視是否開啟evevt與開啟evevt。1.1 mysql evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是off或者0,表示是關閉的。show variables like sche 1.2 開啟evevt功能 setglobal event scheduler 1 ...

定時器 STM32定時器 基本定時器1

我是鼎!定時器時鐘一定要明確其中有哪些變數。上圖為stm407資料手冊摘出來的,可能看不清楚,其實就蘊含了幾點資訊。注意一點,我們看圖2,我們以apb1舉例,上面掛著很多的外設,包括usart1 adc 以及定時器,我們知道apb1上面最高時鐘頻率為84mhz,但是定時器的時鐘是要在此基礎上乘2,也...

Mysql 檢視定時器 開啟定時器 設定定時器時間

1 1.檢視是否開啟evevt與開啟evevt。23 1.1 mysql evevt功能預設是關閉的,可以使用下面的語句來看evevt的狀態,如果是off或者0,表示是關閉的。4 show variables like sche 5 1.2 開啟evevt功能 6 set global event ...