秒表

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. 【.NET 与树莓派】数模转换

    在开始之前,需要说明一对很耳熟的概念--数字信号 & 模拟信号. 这些概念的理论有些复杂,你如果相当有兴趣,可以找来有关的文献细细研究:若你不关心那是啥只想知道咋用,那就通俗但不庸俗地理解一下 ...

  2. SSDT表概念详解

    SSDT 的全称是 System Services Descriptor Table,系统服务描述符表. 这个表就是一个把 Ring3 的 Win32 API 和 Ring0 的内核 API 联系起来 ...

  3. poj 2472

    题意:      给你一个无向图,然后每条边的权值就是不被抓的概率,有个货要从1逃到n,问你他的最安全概率是多少? 思路:       水题,直接跑就行了,一开始自己想多了,还转换了一下log,后来发 ...

  4. Windows核心编程 第五章 作业(下)

    5.4 查询作业统计信息 前面已经介绍了如何使用 Q u e r y I n f o r m a t i o n J o b O b j e c t函数来获取对作业的当前限制信息.也可以使用它来获取关 ...

  5. HTTP自定义Header-(SOCKET-TCP)

      HTTP自定义Header-TCP 前几天弄一些东西,需要在发送http请求的时候自定义http头,找了几个库用着很不爽.有的把Cookie直接干掉了,还自己在头里加了版权,最后终于忍不了了.在网 ...

  6. <JVM从入门到精通>导航

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  7. 【axios】get/post请求params/data传参总结

    axios中get/post请求方式 1. 前言 最近突然发现post请求可以使用params方式传值,然后想总结一下其中的用法. 2.1 分类 get请求中没有data传值方式 2.2 get请求 ...

  8. Failed opening required

    报错 点击页面右下角的图标,再点击错误可以显示报错.或者在项目中runtime--log也可以查看error [64]think\\__require_file(): Failed opening r ...

  9. matlab添加当前路径下的所有子目录

    % 添加当前路径下的所有子目录addpath(genpath(pwd));

  10. OCR横向评测 -- 软工案例分析

    目录 第一部分 调研&评测 使用感受 1. 使用门槛 2. 界面设计 3. 数据标注 4. 模型训练 5. 模型预测 6. 体验评价与改进建议 好的方面: 可能需要改进的方面: 7. BUG反 ...