Go語言協程並發---timer秒表與定時器


秒表

package main

import (
	"fmt"
	"time"
)

/*每秒大喊我要去浪,共9次,然后退出計時*/

func main() {
	var tickerStopped = false
	ticker := time.NewTicker(time.Second)
	go func() {
		time.Sleep(9 * time.Second)
		ticker.Stop()
		tickerStopped = true
	}()
	for {
		if tickerStopped {
			break
		}

		//每次阻塞1秒
		<-ticker.C
		fmt.Println("我要去浪")
	}

	fmt.Println("main over")
}

定時器

package main

import (
	"fmt"
	"os"
	"time"
)


/*三秒后宣布*/
func main051() {
	timer := time.NewTimer(3 * time.Second)
	fmt.Println("計時開始", time.Now())
	x := <- timer.C //時間管道
	fmt.Println("引爆於", x)

	fmt.Println("羅志祥的時間管理")
}


/*簡易實現方式*/
func main052() {
	fmt.Println("計時開始", time.Now())
	x:=<-time.After(3*time.Second)
	fmt.Println("引爆於", x)
	fmt.Println("羅志祥的時間管理")
}

/*定時器的終止*/
func main053() {
	timer := time.NewTimer(5 * time.Second)
	fmt.Println("計時開始",time.Now())
	go func() {
		time.Sleep(3*time.Second)
		//停止計時器(永遠不會向timer.C中寫入數據了)
		ok := timer.Stop()
		if ok{
			fmt.Println("炸彈已拆除")
			os.Exit(0)
		}
	}()

	//阻塞5秒
	endTime := <-timer.C
	fmt.Println("炸彈引爆於", endTime)
}

/*定時器重置*/
func main054() {
	timer := time.NewTimer(5 * time.Second)
	fmt.Println("計時開始",time.Now())

	time.Sleep(time.Second)
	//以當前時間為基准(而不是timer被創建的時間),將定時器設置為2秒
	timer.Reset(2*time.Second)

	//阻塞5秒
	endTime := <-timer.C
	fmt.Println("炸彈引爆於", endTime)
}


/*爆炸后重置定時器*/
func main() {
	timer := time.NewTimer(3 * time.Second)
	fmt.Println("計時開始",time.Now())

	//睡眠期間,timer.C已經被寫入時間
	time.Sleep(5*time.Second)
	//以當前時間為基准(而不是timer被創建的時間),將定時器設置為2秒
	timer.Reset(2*time.Second)

	//阻塞5秒
	endTime := <-timer.C
	fmt.Println("炸彈引爆於", endTime)
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM