golang中的定时器
1. timer 定时器,时间到了执行,只执行一次
package main import (
"fmt"
"time"
) func main() {
// 1. timer基本使用
/*
timer1 := time.NewTimer(2 * time.Second)
t := time.Now()
fmt.Printf("t = %v\n", t)
t2 := <-timer1.C
fmt.Printf("t2 = %v\n", t2)
*/ // 2. 验证timer只能响应一次
/*
timer2 := time.NewTimer(time.Second)
for {
<-timer2.C // 第一次打印时间到,第二次就会死锁(原因:timer2定时器只往通道中发送一次Time数据)
fmt.Println("时间到")
}
*/ // 3. timer实现延时的功能
/*
fmt.Println("开始了", time.Now())
time.Sleep(time.Second)
fmt.Println("第一次延时:", time.Now())
timer3 := time.NewTimer(2 * time.Second)
<-timer3.C
fmt.Println("第二次延时:", time.Now())
<-time.After(3 * time.Second) // time.After() 就是对 NewTimer(d).C 的封装
fmt.Println("第三次延时:", time.Now())
*/ // 4. 停止定时器
/*
timer4 := time.NewTimer(2 * time.Second)
go func() {
<-timer4.C
fmt.Println("定时器执行了")
}()
//time.Sleep(3 * time.Second)
// 注意:如果定时器执行了,然后在调用timer4.Stop()就会返回false,如果没有执行就调用Stop()就会返回true
// 定时器一旦被关闭,从定时器通道中读取数据和后面的代码将不会在执行
b := timer4.Stop()
if b {
fmt.Println("timer4已经关闭")
}
for { }
*/ // 5. 重置定时器
fmt.Println(time.Now())
timer6 := time.NewTimer(3 * time.Second)
timer6.Reset(time.Second)
fmt.Println(<-timer6.C) }
2. Ticker:时间到了,多次执行
package main import (
"fmt"
"sync"
"time"
) var wg sync.WaitGroup func main() {
// 2. ticker 定时器,时间到了多次执行
ticker := time.NewTicker(1 * time.Second)
wg.Add(1)
go func() {
i := 1
for {
fmt.Println(<-ticker.C)
if i == 5 {
ticker.Stop()
break
}
i++
}
wg.Done()
fmt.Println("子 goroutine结束了")
}() wg.Wait()
fmt.Println("主 goroutine 结束了...") }
golang中的定时器的更多相关文章
- golang 中的定时器(timer),更巧妙的处理timeout
今天看到kite项目中的一段代码,发现挺有意思的. // generateToken returns a JWT token string. Please see the URL for detail ...
- golang中的race检测
golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go. 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题. 所以在本 ...
- 浅谈JavaScript中的定时器
引言 使用setTimeout()和setInterval()创建的定时器可以实现很多有意思的功能.很多人认为定时器是一个单独的线程(之前我也是),但是JavaScript是运行在单线程环境中的,而定 ...
- 第十四篇:在SOUI中使用定时器
前言 定时器是win32编程中常用的制作动画效果的手段.在Win32编程中,可以使用::SetTimer来创建定时器,定时器消息会被会发到调用SetTimer时指定的HWND. 在SOUI中一般来说只 ...
- 基础知识 - Golang 中的正则表达式
------------------------------------------------------------ Golang中的正则表达式 ------------------------- ...
- cocos2dx中的定时器及其分类
cocos2dx中的定时器分三大类: 1.帧循环定时器 2.一次性定时器 3.自定义定时器 一.帧循环定时器,顾名思义,每一帧都会执行一次,用于实时性要求比较高的场合,如碰撞检测 void sched ...
- C++控制台程序中使用定时器
转自博客:http://www.cnblogs.com/phinecos/archive/2008/03/08/1096691.html 作者:洞庭散人 “我现在项目是一个控制台程序,用到的Win32 ...
- 在Android开发中,定时器一般有以下3种实现方法
在Android开发中,定时器一般有以下3种实现方法: 原文地址http://www.360doc.com/content/12/0619/13/87000_219180978.shtml 一.采用H ...
- Qt中使用定时器(可使用QObject::timerEvent定时执行,QTimer::singleShot可只触发一次)
在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度 1.QObject类的定时器 QObje ...
随机推荐
- 关于c++、go、nodejs、python的计算性能测试,结果令人惊讶
计算性能在计算密集型的服务上,是非常重要的, 一直以为,在计算性能上,肯定是C++ > go > nodejs >= python 但测试结果却让人大跌眼镜!!! 实际的结果是: ...
- 【LeetCode】1579. 保证图可完全遍历 Remove Max Number of Edges to Keep Graph Fully Traversable
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题思路 并查集 代码 欢迎加入组织 日期 题目地址:https ...
- E. Congruence Equation
E. Congruence Equation 思路: 中国剩余定理 \(a^n(modp) = a^{nmod(p-1)}(modp)\),那么枚举在\([0,n-2]\)枚举指数 求\(a^i\)关 ...
- Linux中架构中的备份服务器搭建(rsync)
本期内容概要 Linux中的备份方式 架构中备份服务器搭建(rsync) 内容详细 1.备份方式 1. cp : 本机复制(只能作用在本机) 2. scp : 远程复制 两种模式: 推 : 本地上传到 ...
- pytest之 fixture 实现机制
一.相同测试数据存放优化 在讲 fixture 实现机制之前,插入一段内容 上次有个小伙伴问我说,类似下面的用例代码情况,每条测试用例的数据都一样的,我们可以怎么进行优化吗? 当然是可以的 其实我们可 ...
- 使用.NET 6开发TodoList应用(15)——实现查询搜索
系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 本文我们继续来看查询过程中的另外一个需求:搜索.搜索的含义是目标字段的全部或者部分值匹配请求中的搜索条件,对应到数据库层面是C ...
- 编写Java程序_定义两个方法,实现奇数偶数的判断,并计算和(有参数有返回值方法)
需求说明: 定义两个方法,在控制台输入一个数字,这两个方法可以求出1到该数字之间所有偶数之和.奇数之和,并将对应结果和返回.在main方法中调用该方法,并在控制台打印出结果.(有参数有返回值方法) 运 ...
- 「超市管理系统——商品管理」 · Java Swing + MySQL JDBC开发
项目下载:https://download.csdn.net/download/weixin_44893902/13715024 1.9元付费赞助下载:https://download.csdn.ne ...
- 自动化集成:Kubernetes容器引擎详解
前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译.打包.镜像构建.部署等操作:本篇文章主要描述Kubernetes引擎用法. 一.基础简介 Kube ...
- Swoole 中使用 Lock 实现进程间锁
注意:不要在 lock 和 unlock 操作中间使用可能引起协程切换的 API. $lock = new Swoole\Lock(SWOOLE_MUTEX); echo "[Master] ...