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)
    }
    

      

  • 相关阅读:
    Oracle-启动和关闭oracle的归档(ARCHIVELOG)模式
    Linux-数据表示方式
    Linux-21-30
    linux-1-10
    自律
    jenkins-修改系统时间
    jenkins-通过ssh username with private key配置节点服务器
    jenkins-slave开机自动启动
    mongodb-mongo使用
    mongodb-centos76yum安装mongodb
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/12769918.html
Copyright © 2011-2022 走看看