golang中的定时器

golang中的定时器

  1. sleep

sleep
这个是系统自己,无法做到定时

  1. timer
type Timer struct {
	C <-chan Time
	r runtimeTimer
}

系统向里面写了一个时间,指定定时时长,时间到了以后系统会向c里面写一个时间,需要读出来,需要注意的是这里面系统只操作一次,不能用for循环操作。

timeout...
fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan receive]:
main.main()
	F:/go_workspace/JiakaoSystom/tickerAndTimer.go:62 +0x9c

如果需要设置循环的话需要用reset

func main() {
	//fmt.Println(time.Now())
	//mytime := time.NewTimer(2*time.Second)
	//nowtime :=<-mytime.C//系统向里面写了一个时间,指定定时时长,时间到了以后系统会向c里面写一个时间,需要读出来,
	//fmt.Println(nowtime)

	myticker := time.NewTicker(time.Second)
	go func() {
		//wg.Add(1)
		for {
			mytime := <- myticker.C
			fmt.Println(mytime)
		}
	}()
	time.Sleep(10*time.Second)
}

  1. time.after

这是timer的简略版

func After(d Duration) <-chan Time {
	return NewTimer(d).C
}

只是把timer中的c放了进去,可以直接读取就行了

  1. ticker

这个是有周期性触发的,需要配合for使用

package main

import (
	"fmt"
	"time"
)



func main() {
	//fmt.Println(time.Now())
	//mytime := time.NewTimer(2*time.Second)
	//nowtime :=<-mytime.C//系统向里面写了一个时间,指定定时时长,时间到了以后系统会向c里面写一个时间,需要读出来,
	//fmt.Println(nowtime)

	myticker := time.NewTicker(time.Second)
	go func() {
		//wg.Add(1)
		for {
			mytime := <- myticker.C
			fmt.Println(mytime)
		}
	}()
	time.Sleep(10*time.Second)
}

发布了74 篇原创文章 · 获赞 2 · 访问量 6480

猜你喜欢

转载自blog.csdn.net/weixin_42067668/article/details/103482179
今日推荐