定時器在應用編程裏用得很廣,我們手機裏的鬧鐘,幻燈片播放圖片等應用都用到定時器。定時器,每隔一段時間幹一件事(程序裏表現爲調用一個函數),像鬧鐘,每隔一天響一次。
1 核心API說明
import "github.com/mattn/go-gtk/glib"
func TimeoutAdd(interval uint, f interface{}, datas ...interface{}) (id int)
功能:創建定時器
參數:
interval:設置的時間間隔,以毫秒爲單位(1000即爲1秒 )
f:回調函數的名字,回調函數的返回類型爲bool,當回調函數返回值爲false時,定時器執行一次後便會停止工作,不再循環執行。所以,要想定時器連續工作,循環執行所指定的回調函數,應該返回true。
datas:給回調函數傳的參數
返回值:定時器id號
func TimeoutRemove(id int)
功能:移除定時器
參數:定時器id號
2 示例程序
glade設計如下:
示例代碼:
package main
import (
"os"
"strconv"
"github.com/mattn/go-gtk/glib"
"github.com/mattn/go-gtk/gtk"
)
func main() {
gtk.Init(&os.Args)
builder := gtk.NewBuilder() //新建builder
builder.AddFromFile("test.glade") //讀取glade文件
// 獲取相應控件
window := gtk.WindowFromObject(builder.GetObject("window1"))
label := gtk.LabelFromObject(builder.GetObject("label"))
buttonStart := gtk.ButtonFromObject(builder.GetObject("buttonStart"))
buttonStop := gtk.ButtonFromObject(builder.GetObject("buttonStop"))
label.ModifyFontSize(50) //設置label字體大小
buttonStop.SetSensitive(false) //停止按鈕不能按
var id int //定時器id
var num int = 1 //累加標記
//信號處理
//啓動按鈕
buttonStart.Connect("clicked", func() {
//啓動定時器, 500毫秒爲時間間隔,回調函數爲匿名函數
id = glib.TimeoutAdd(500, func() bool {
num++
label.SetText(strconv.Itoa(num)) //給標籤設置內容
return true //只要定時器沒有停止,時間到自動調用回調函數
})
buttonStart.SetSensitive(false) //啓動按鈕變灰,不能按
buttonStop.SetSensitive(true) //定時器啓動後,停止按鈕可以按
})
//停止按鈕
buttonStop.Connect("clicked", func() {
//停止定時器
glib.TimeoutRemove(id)
buttonStart.SetSensitive(true)
buttonStop.SetSensitive(false)
})
window.Connect("destroy", gtk.MainQuit) //關閉窗口
window.ShowAll()
gtk.Main()
}
程序運行效果: