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)
}
Go语言协程并发---timer秒表与定时器的更多相关文章
- Go语言协程并发---管道信号量应用
package main import ( "fmt" "math" "strconv" "time" ) /* ·10 ...
- Go语言协程并发---互斥锁sync.Mutex
package main import ( "fmt" "sync" "time" ) /* mt.Lock() 抢锁 一次只能被一个协程锁 ...
- Go语言协程并发---等待组sync.WaitGroup
package main import ( "fmt" "sync" "time" ) /*等待组API介绍*/ func main071( ...
- Go语言协程并发---条件变量
package main import ( "fmt" "sync" "time" ) func main() { //要监听的变量 bit ...
- Go语言协程并发---读写锁sync.RWMutex
package main import ( "fmt" "sync" "time" ) /* 读写锁 多路只读 一路只写 读写互斥 */ / ...
- Go语言协程并发---生产者消费者实例
package main import ( "fmt" "strconv" "time" ) /* 改进生产者消费者模型 ·生产者每秒生产一 ...
- Go语言协程并发---原子操作
package main import ( "fmt" "sync/atomic" ) /* 用原子来替换锁,其主要原因是: 原子操作由底层硬件支持,而锁则由操 ...
- Go语言协程并发---select多路复用应用
package main import ( "fmt" "time" ) /* ·循环从一写两读三条管道中随机选择一条能走的路 ·等所有路都走不通了就退出循环 ...
- python3通过gevent.pool限制协程并发数量
协程虽然是轻量级的线程,但到达一定数量后,仍然会造成服务器崩溃出错.最好的方法通过限制协程并发数量来解决此类问题. server代码: #!/usr/bin/env python # -*- codi ...
随机推荐
- 【.NET 与树莓派】数模转换
在开始之前,需要说明一对很耳熟的概念--数字信号 & 模拟信号. 这些概念的理论有些复杂,你如果相当有兴趣,可以找来有关的文献细细研究:若你不关心那是啥只想知道咋用,那就通俗但不庸俗地理解一下 ...
- SSDT表概念详解
SSDT 的全称是 System Services Descriptor Table,系统服务描述符表. 这个表就是一个把 Ring3 的 Win32 API 和 Ring0 的内核 API 联系起来 ...
- poj 2472
题意: 给你一个无向图,然后每条边的权值就是不被抓的概率,有个货要从1逃到n,问你他的最安全概率是多少? 思路: 水题,直接跑就行了,一开始自己想多了,还转换了一下log,后来发 ...
- 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函数来获取对作业的当前限制信息.也可以使用它来获取关 ...
- HTTP自定义Header-(SOCKET-TCP)
HTTP自定义Header-TCP 前几天弄一些东西,需要在发送http请求的时候自定义http头,找了几个库用着很不爽.有的把Cookie直接干掉了,还自己在头里加了版权,最后终于忍不了了.在网 ...
- <JVM从入门到精通>导航
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- 【axios】get/post请求params/data传参总结
axios中get/post请求方式 1. 前言 最近突然发现post请求可以使用params方式传值,然后想总结一下其中的用法. 2.1 分类 get请求中没有data传值方式 2.2 get请求 ...
- Failed opening required
报错 点击页面右下角的图标,再点击错误可以显示报错.或者在项目中runtime--log也可以查看error [64]think\\__require_file(): Failed opening r ...
- matlab添加当前路径下的所有子目录
% 添加当前路径下的所有子目录addpath(genpath(pwd));
- OCR横向评测 -- 软工案例分析
目录 第一部分 调研&评测 使用感受 1. 使用门槛 2. 界面设计 3. 数据标注 4. 模型训练 5. 模型预测 6. 体验评价与改进建议 好的方面: 可能需要改进的方面: 7. BUG反 ...