zoukankan      html  css  js  c++  java
  • 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)
    }
    

      

  • 相关阅读:
    Reflector7.5.2.1(最新免费破解版)
    linux shell中变量的特殊处理
    linux中什么是shell?
    关于sql server中主键的一点研究
    根据数据库连接,登录操作系统的一个方法
    无图片取得圆角效果
    结对编程作业(java实现)
    第三章、android入门
    第七章:android应用
    javascript编辑excel并下载
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/12769918.html
Copyright © 2011-2022 走看看