秒表

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

  

Go语言协程并发---timer秒表与定时器的更多相关文章

  1. Go语言协程并发---管道信号量应用

    package main import ( "fmt" "math" "strconv" "time" ) /* ·10 ...

  2. Go语言协程并发---互斥锁sync.Mutex

    package main import ( "fmt" "sync" "time" ) /* mt.Lock() 抢锁 一次只能被一个协程锁 ...

  3. Go语言协程并发---等待组sync.WaitGroup

    package main import ( "fmt" "sync" "time" ) /*等待组API介绍*/ func main071( ...

  4. Go语言协程并发---条件变量

    package main import ( "fmt" "sync" "time" ) func main() { //要监听的变量 bit ...

  5. Go语言协程并发---读写锁sync.RWMutex

    package main import ( "fmt" "sync" "time" ) /* 读写锁 多路只读 一路只写 读写互斥 */ / ...

  6. Go语言协程并发---生产者消费者实例

    package main import ( "fmt" "strconv" "time" ) /* 改进生产者消费者模型 ·生产者每秒生产一 ...

  7. Go语言协程并发---原子操作

    package main import ( "fmt" "sync/atomic" ) /* 用原子来替换锁,其主要原因是: 原子操作由底层硬件支持,而锁则由操 ...

  8. Go语言协程并发---select多路复用应用

    package main import ( "fmt" "time" ) /* ·循环从一写两读三条管道中随机选择一条能走的路 ·等所有路都走不通了就退出循环 ...

  9. python3通过gevent.pool限制协程并发数量

    协程虽然是轻量级的线程,但到达一定数量后,仍然会造成服务器崩溃出错.最好的方法通过限制协程并发数量来解决此类问题. server代码: #!/usr/bin/env python # -*- codi ...

随机推荐

  1. Mysql - 使用入门

    本文是学习 Mysql必知必会 后的笔记 学习之前需要创建一个数据库,然后导入下面两个mysql脚本 create database db1 charset utf8; ############### ...

  2. 机器学习03-sklearn.LinearRegression 源码学习

    在上次的代码重写中使用了sklearn.LinearRegression 类进行了线性回归之后猜测其使用的是常用的梯度下降+反向传播算法实现,所以今天来学习它的源码实现.但是在看到源码的一瞬间突然有种 ...

  3. 服务器安装node全教程

    我的服务器centos,安装node时出了点小麻烦,在这里记述我的方法. 1.进入node下载网站https://nodejs.org/en/download/,这里右键复制下载链接 2.进入cent ...

  4. POJ 1961 KMP(当前重复次数)

    题意:       前缀重复次数,举个例子,aaa 2的位置2个a,3的位置3个a abcabcabc 6的位置两个abcabc,9的位置三个abcabc.... 思路:      KMP基础题目之一 ...

  5. (翻译)Attacking Interoperability(攻击互操作性)in Black Hat 2009 研究报告

    前言 攻击互操作性(Attacking Interoperability)是 Mark & Ryan & David 发表于 2009 年的美国黑帽大会(Black Hat)上的一份研 ...

  6. C#-CHTTPDownload

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. Portswigger web security academy:OS command injection

    Portswigger web security academy:OS command injection 目录 Portswigger web security academy:OS command ...

  8. Activity,Tasks

    常见的一些Activity的打开方式: //1.拨打电话 // 给移动客服10086拨打电话 Uri uri = Uri.parse("tel:10086"); Intent in ...

  9. tp5.1中返回当天、昨天、当月等的开始和结束时间戳

    /** * 返回今日开始和结束的时间戳 * * @return array */function today(){ list($y, $m, $d) = explode('-', date('Y-m- ...

  10. php中输出函数的区别

    isset() .empty()与is_null的区别 1.当变量未定义时,is_null() 和"参数本身"是不允许作为参数判断的,会报Notice警告错误: 2.empty , ...